使用NSDictionary填充数组

时间:2015-02-27 11:26:22

标签: ios objective-c uitableview 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数据的正确数组以及我做错了什么?

回应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;
    },

谢谢!

2 个答案:

答案 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解析,你可能在那里做错了。