如何从NSDictionary数组中获取值数组

时间:2013-11-19 09:44:35

标签: ios objective-c nsdictionary

当我尝试在日志中打印json值数组时,我得到的是地址而不是值。这是我编码的方式。

NSData *jsonData = [json dataUsingEncoding:NSASCIIStringEncoding];
            NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&error];
            NSMutableArray *tempArray = [NSMutableArray arrayWithCapacity:jsonArray.count];
            NSMutableArray *anotherTempArray = [NSMutableArray arrayWithCapacity:jsonArray.count];
            NSDictionary *dict;
            for(dict in jsonArray)
            {
                NSString *projectName = dict[@"Name"];

                NSString *urlText = dict[@"Url"];
                NSLog(@"Url text in array = %@", urlText);

                NSString *attch = dict[@"attachmentes"];
                NSLog(@"Attached url in array = %@", attch);

                NSString *projID = dict[@"ProjectID"];
                NSLog(@"Project ID in array = %@", projID);

                SaveAttachment *saveAt = [[SaveAttachment alloc] initWithName:projectName withList:@"View"     withAttachment:@"View"];
                [tempArray addObject:saveAt];

                SaveProjectId *saveProj = [[SaveProjectId alloc] initWithProjectId:projID];
                saveProj.projectId = projID;
                [anotherTempArray addObject:saveProj];
             }
            array = tempArray;
            [self.tableViewProject reloadData];
            NSLog(@"Array of project IDs === %@", anotherTempArray); //Get values (array of project ids here.

        }

enter image description here

5 个答案:

答案 0 :(得分:3)

替换

SaveProjectId *saveProj = [[SaveProjectId alloc] initWithProjectId:projID];
saveProj.projectId = projID;
[anotherTempArray addObject:saveProj];

[anotherTempArray addObject:projID];

答案 1 :(得分:1)

这是因为你的 anotherTempArray 包含SaveProjectId的对象,即,每次在for循环中你都要添加 saveProj 对象而不是 projID 。这就是你的数组显示 SaveProjectId 对象的原因。

如果您想直接保存它们,请使用以下修改

[anotherTempArray addObject:projID];

或者你可以使用喜欢(这是我更喜欢的)

NSLog(@"First project ID === %@", [anotherTempArray objectAtindex:0] projectId]);

答案 2 :(得分:0)

您正在将SaveProjectId对象存储在数组中,因此当您打印内容时,您会看到这些对象的地址。

答案 3 :(得分:0)

你的“anotherTemoArray”有SaveProbectId的对象,所以你必须将索引的对象传递给SaveProjectId然后你才能看到数组信息

答案 4 :(得分:0)

调用NSLog(@"Array of project IDs === %@", anotherTempArray);时,正在调用'anotherTempArray'中的每个对象上的-(NSString*)description方法。

在您的情况下,意味着在-(NSString*)description个对象上调用SaveProjectId。覆盖它以打印出你想要的东西......例如。

-(NSString*)description {
    return [NSString stringWithFormat:@"SaveProjectId: %@",self.projectId];
}