Sergio Garrido
Sergio Garrido

Reputation: 141

IOS Objective C - Error receiving json data from url

I have an app and I receive data from json url. And appears the next error:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0xb0000000000003f3'

The problem, I think, can not be parsed numbers correctly received from json. This code worked well until a few weeks ago, and now appears error:

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
                                        URLWithString:@"http://my-url"]];

NSData *response = [NSURLConnection sendSynchronousRequest:request
                                         returningResponse:nil error:nil];

NSError *e;
NSArray *object = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:&e];

NSDictionary *recipeDictionary = (NSDictionary*)object;

NSArray* recipeArray = (NSArray*)[recipeDictionary objectForKey:@"provincias"];

self.provincias = [[NSMutableArray alloc] init];


for (NSDictionary* dic in recipeArray) {

    Provincias *prov = [[Provincias alloc] init];
    prov.tipoProvincia = [dic objectForKey:@"Provincia"];
    prov.tipoIdProvincia = [dic objectForKey:@"idProvincia"];
    prov.tipoNumActos = [dic objectForKey:@"Actos"];
    prov.tipoChecked = @"no";

    [provincias addObject:prov];


}

[self.tableView reloadData];

The structure of the json object is:

{
"provincias": [
    {
        "idProvincia": 15,
        "Provincia": "A Coruña",
        "Actos": 0
    },
    {
        "idProvincia": 1,
        "Provincia": "Álava",
        "Actos": 0
    },
    {
        "idProvincia": 2,
        "Provincia": "Albacete",
        "Actos": 0
    },
    {
        "idProvincia": 3,
        "Provincia": "Alicante",
        "Actos": 63
    },
    {
        "idProvincia": 4,
        "Provincia": "Almeria",
        "Actos": 0
    },
    {
        "idProvincia": 33,
        "Provincia": "Asturias",
        "Actos": 0
    },
    {
        "idProvincia": 5,
        "Provincia": "Ávila",
        "Actos": 0
    },
    {
        "idProvincia": 6,
        "Provincia": "Badajoz",
        "Actos": 0
    },
    {
        "idProvincia": 7,
        "Provincia": "Baleares",
        "Actos": 0
    },
    {
        "idProvincia": 8,
        "Provincia": "Barcelona",
        "Actos": 0
    },
    {
        "idProvincia": 9,
        "Provincia": "Burgos",
        "Actos": 0
    },
    {
        "idProvincia": 10,
        "Provincia": "Cáceres",
        "Actos": 0
    },
    {
        "idProvincia": 11,
        "Provincia": "Cádiz",
        "Actos": 3
    },
    {
        "idProvincia": 14,
        "Provincia": "Córdoba",
        "Actos": 0
    },
    {
        "idProvincia": 39,
        "Provincia": "Cantabria",
        "Actos": 0
    },
    {
        "idProvincia": 12,
        "Provincia": "Castellón",
        "Actos": 206
    },
    {
        "idProvincia": 51,
        "Provincia": "Ceuta",
        "Actos": 0
    },
    {
        "idProvincia": 13,
        "Provincia": "Ciudad Real",
        "Actos": 0
    },
    {
        "idProvincia": 16,
        "Provincia": "Cuenca",
        "Actos": 0
    },
    {
        "idProvincia": 17,
        "Provincia": "Girona",
        "Actos": 0
    },
    {
        "idProvincia": 18,
        "Provincia": "Granada",
        "Actos": 0
    },
    {
        "idProvincia": 19,
        "Provincia": "Guadalajara",
        "Actos": 0
    },
    {
        "idProvincia": 20,
        "Provincia": "Guipúzcoa",
        "Actos": 0
    },
    {
        "idProvincia": 21,
        "Provincia": "Huelva",
        "Actos": 1
    },
    {
        "idProvincia": 22,
        "Provincia": "Huesca",
        "Actos": 0
    },
    {
        "idProvincia": 23,
        "Provincia": "Jaén",
        "Actos": 0
    },
    {
        "idProvincia": 26,
        "Provincia": "La Rioja",
        "Actos": 0
    },
    {
        "idProvincia": 35,
        "Provincia": "Las Palmas",
        "Actos": 0
    },
    {
        "idProvincia": 24,
        "Provincia": "León",
        "Actos": 0
    },
    {
        "idProvincia": 25,
        "Provincia": "Lleida",
        "Actos": 0
    },
    {
        "idProvincia": 27,
        "Provincia": "Lugo",
        "Actos": 0
    },
    {
        "idProvincia": 29,
        "Provincia": "Málaga",
        "Actos": 0
    },
    {
        "idProvincia": 28,
        "Provincia": "Madrid",
        "Actos": 0
    },
    {
        "idProvincia": 52,
        "Provincia": "Melilla",
        "Actos": 0
    },
    {
        "idProvincia": 30,
        "Provincia": "Murcia",
        "Actos": 0
    },
    {
        "idProvincia": 31,
        "Provincia": "Navarra",
        "Actos": 2
    },
    {
        "idProvincia": 32,
        "Provincia": "Ourense",
        "Actos": 0
    },
    {
        "idProvincia": 34,
        "Provincia": "Palencia",
        "Actos": 0
    },
    {
        "idProvincia": 36,
        "Provincia": "Pontevedra",
        "Actos": 0
    },
    {
        "idProvincia": 37,
        "Provincia": "Salamanca",
        "Actos": 0
    },
    {
        "idProvincia": 38,
        "Provincia": "Santa Cruz de Tenerife",
        "Actos": 0
    },
    {
        "idProvincia": 40,
        "Provincia": "Segovia",
        "Actos": 0
    },
    {
        "idProvincia": 41,
        "Provincia": "Sevilla",
        "Actos": 0
    },
    {
        "idProvincia": 42,
        "Provincia": "Soria",
        "Actos": 0
    },
    {
        "idProvincia": 43,
        "Provincia": "Tarragona",
        "Actos": 0
    },
    {
        "idProvincia": 44,
        "Provincia": "Teruel",
        "Actos": 8
    },
    {
        "idProvincia": 45,
        "Provincia": "Toledo",
        "Actos": 0
    },
    {
        "idProvincia": 46,
        "Provincia": "Valencia",
        "Actos": 286
    },
    {
        "idProvincia": 47,
        "Provincia": "Valladolid",
        "Actos": 0
    },
    {
        "idProvincia": 48,
        "Provincia": "Vizcaya",
        "Actos": 0
    },
    {
        "idProvincia": 49,
        "Provincia": "Zamora",
        "Actos": 0
    },
    {
        "idProvincia": 50,
        "Provincia": "Zaragoza",
        "Actos": 11
    }
]}

Thanks in advance ;) Sergio

Upvotes: 0

Views: 62

Answers (2)

Miknash
Miknash

Reputation: 7948

Not 100% sure about your implementation of Provincias but I think your problem is here:

prov.tipoProvincia = [dic objectForKey:@"Provincia"];// -> ok
prov.tipoIdProvincia = [dic objectForKey:@"idProvincia"];// -> try to send int message to convert String to Int
prov.tipoNumActos = [dic objectForKey:@"Actos"]; // -> same here

Your objects in dict are NSString but you need to cast them to NSInteger.

What you could do is:

prov.tipoProvincia = [dic objectForKey:@"Provincia"];// -> ok
prov.tipoIdProvincia = [[dic objectForKey:@"idProvincia"] intValue];// -> you get string but Id is a number
prov.tipoNumActos = [[dic objectForKey:@"Actos"] intValue]; // -> same here

Upvotes: 2

Pradumna Patil
Pradumna Patil

Reputation: 2220

all the members of Provincias class are not of type NSString and dictionary is sending values in string format that is why the issue is.

Upvotes: 0

Related Questions