我有NSDictionary从JSON获取数据,现在我想管理这些数据并填充tableView
。但是,我面临着不可预知的障碍。我的观点是 - 使用适当的值(图像数组,文本值等)创建数组和方法。目前我正在使用AFNetworking。在一种方法中,我获得了JSON数据:
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
self.dataDict = (NSDictionary*)responseObject;
为了尝试创建清晰的代码,我想通过函数分离其他方法。我试过了:
-(void)setImageView{
if (self.dataDict){
self.dataDictArray = [[self.dataDict valueForKey:@"id"] objectAtIndex:0];
然后,当我想使用NSLog
时,我会执行以下操作:
NSLog(@"Check the array %@", [self.dataDictArray objectAtIndex:0]);
它给我一个错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectAtIndex:]: unrecognized selector sent to instance
显然,这意味着我的数组中索引0处没有对象。但是当我这样做的时候:
NSLog(@"Check the array %@", self.dataDictArray);
它在控制台中显示我的数组填充单个" id"数字3,实际上是NSDictionary
中的第一个ID。
我想了解,如何纠正包含NSDictionary数据的正确数组以及我做错了什么?
回应obj。看起来像这样:
(
{
id = 3;
dog = "\U041a\U0430\U043a\U043e\U0439-\U0442\U043e \U043c\U0443\U0434\U0430\U043a \U043d\U0430\U043a\U0440\U0443\U0442\U0438\U043b";
image = "cute_dog/116.jpg";
score = 586;
},
{
id = 115;
dog = "\U0422\U0430\U043d\U044f \U041a\U043b\U044e\U043a\U0432\U0438\U043d\U0430";
image = "cute_dog/115.jpg";
score = 481;
},
等
谢谢!
答案 0 :(得分:2)
通常情况下你说你有Array of Dictionaries
。因此,您应该按照以下步骤获取数据。
<强> Step 1.
强>
self.dataDictArray = (NSArray*)responseObject;
<强> Step 2.
强>
self.dataDict=[self.dataDictArray objectAtIndex:0];
<强> Step 3.
强>
NSLog(@"ID = %@",[self.dataDict valueForKey:@"id"]);
<强>简单。强>
干杯。
答案 1 :(得分:1)
***由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFNumber objectAtIndex:]:无法识别的选择器发送到实例
显然,这意味着我的数组
中索引0处没有对象
您对错误的理解是错误的。 是索引0处的对象,它不是NSDictionary实例,而是NSNumber(您提到的数字3)。 NSNumber没有名为objectAtIndex:的方法,因此这是导致错误的原因。
检查你的JSON解析,你可能在那里做错了。