我有一个应用程序,我从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
}
]}
提前致谢;) 塞尔吉奥
答案 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
正在以字符串格式发送值,这就是问题所在的原因。