用 NSDictionary 填充数组
Filling an array with NSDictionary
我有 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 的数据的正确数组以及我做错了什么?
响应对象。看起来像这样:
(
{
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;
},
等等
谢谢!
通常按照你说的 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"]);
简单。
干杯。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectAtIndex:]: unrecognized selector sent to instance
Obviously, it means that there is no object at index 0 in my array
你对错误的理解是错误的。 是索引0处的对象,它不是NSDictionary实例,而是NSNumber(你提到的数字3)。 NSNumber 没有名为 objectAtIndex: 的方法,所以这是错误的原因。
检查你的 JSON 解析,你可能在那里做错了。
我有 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 的数据的正确数组以及我做错了什么?
响应对象。看起来像这样:
(
{
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;
},
等等
谢谢!
通常按照你说的 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"]);
简单。
干杯。
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber objectAtIndex:]: unrecognized selector sent to instance
Obviously, it means that there is no object at index 0 in my array
你对错误的理解是错误的。 是索引0处的对象,它不是NSDictionary实例,而是NSNumber(你提到的数字3)。 NSNumber 没有名为 objectAtIndex: 的方法,所以这是错误的原因。
检查你的 JSON 解析,你可能在那里做错了。