使用从 JSON 数据中提取的值时出现 NSInvalidArgumentException
Posted
技术标签:
【中文标题】使用从 JSON 数据中提取的值时出现 NSInvalidArgumentException【英文标题】:NSInvalidArgumentException when using a value extracted from JSON data 【发布时间】:2011-11-02 00:32:43 【问题描述】:我正在尝试检索 id
的值:
"id":1,"name":"XYZ"
当我使用时:
NSString *jsonData = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
NSArray * myPeople = [jsonData JSONValue];
NSString *name = [[NSString alloc] init];
NSDictionary *person = [myPeople objectAtIndex:[indexPath row]];
name = [NSString stringWithString:[person valueForKey:@"id"]];
name = [name stringByAppendingString:@". "];
name = [name stringByAppendingString:[person valueForKey:@"name"]];
name = [name stringByAppendingString:[person valueForKey:@"id"]];
cell.textLabel.text = name;
我收到以下错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException'
reason: '-[NSCFNumber length]: unrecognized selector sent to instance 0x4e7f8b0
我该如何解决这个问题?
【问题讨论】:
建议:不要写“请帮助”,而是发布编译器错误的文本。 我没有使用您使用的 JSON 库,但您提供的代码看起来不错。异常说length
正在被 NSNumber
调用,你能显示其余的代码吗?
这不是编译器错误。至少你需要了解编译时间和运行时间的区别。
【参考方案1】:
您同时调用了stringWithString:
和stringByAppendingString:
,但随后传入了NSNumber
需要获取NSNumber
的字符串值
[[person valueForKey:@"id"] stringValue];
或使用如下格式:
name = [NSString stringWithFormat:@"%@%@", name, [person valueForKey:@"id"]];
我也会考虑稍微改变一下结构,这样更容易理解:
NSDictionary *person = [myPeople objectAtIndex:[indexPath row]];
NSString *personName = [person valueForKey:@"name"];
NSSNumber *personId = [person valueForKey:@"id"];
NSString *name = [NSString stringWithFormat:@"%@. %@ %@", personId, personName, personId];
对于排序,您要确保不会在每次设置单元格时都提取数据(看起来像这样),否则这将是一个糟糕的体验。
我相信有人可以为您指出一种更好的排序方式,但我能想到的最快的方法是
NSArray *myPeople = [[jsonData JSONValue] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2)
return [[obj1 objectForKey:@"id"] compare:[obj2 objectForKey:@"id"]];
]
【讨论】:
我有另一个查询,我从 URL 获得的 JSON 数据是:["id":1,"name":"XYZ","id":3,"name ":"PQR","id":2,"name":"ABC"。我想在他们的 id 的亚洲以排序的形式将它们显示在一个表格的单元格中。你能指导我吗 这很有帮助!! :) 非常感谢您的帮助 嘿,只是一个简单的问题.. 你能建议我一个如何设计和实施评级字段的选项吗?我在互联网上看到有几个选项,例如我可以使用的带有数字格式化程序的文本字段、广播组、组合框。请让我知道,哪个适合以及如何实施。另外,当我在 Xcode 4 中选择 View->Utilities-> show objects Library 时,它只显示对象而不是我在 Internet 上看到的对象库,你也可以指导我吗 当您遇到问题时,最好先尝试搜索。如果您找不到答案,请提出一个新问题。如果您在 cmets 中提问,那么遇到相同问题的其他人很难找到给出的任何答案。 对不起,下次注意! :)以上是关于使用从 JSON 数据中提取的值时出现 NSInvalidArgumentException的主要内容,如果未能解决你的问题,请参考以下文章
当 json 数据的值发布到 .net Web 服务时出现 Json Failed 错误?
Web Scraping:在 Python 中解析 JSON 时出现 KeyError