IOS Objective C - 从url接收json数据时出错

时间:2015-07-23 10:34:25

标签: ios objective-c json

我有一个应用程序,我从json url接收数据。并出现下一个错误:

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

我认为,这个问题不能正确解析从json收到的数字。 此代码在几周前运行良好,现在出现错误:

    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];

json对象的结构是:

{
"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
    }
]}

提前致谢;) 塞尔吉奥

2 个答案:

答案 0 :(得分:2)

Provincias的实施情况不是100%肯定,但我认为您的问题出在此处:

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

你在dict中的对象是NSString,但你需要将它们转换为NSInteger

你能做的是:

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

答案 1 :(得分:0)

Provincias类的所有成员都不是NSString类型,而dictionary正在以字符串格式发送值,这就是问题所在的原因。