NSMutableArray计数表示只有一个元素,但它们实际上更多

时间:2013-12-29 15:10:34

标签: ios objective-c xml-parsing nsdictionary

我正在尝试从NSDictionary获取所需的数据。 NSDictionary看起来像:

{
    result =     {
        id =         (
                        {
                text = 1;
            },
                        {
                text = 2;
            }
        );
        name =         (
                        {
                text = "name 1";
            },
                        {
                text = "name 2";
            }
        );
}

问题是 - 可以是“name”或“id”的单个元素,当它是单个元素时,会发生错误。我正在尝试很多解决方案来修复它,其中一个:

 NSDictionary * dict0=[_xmlDictionary objectForKey:@"result"];

    ID =[[NSMutableArray alloc] init];
    [ID addObject:[[dict0 valueForKey:@"id"] valueForKey:@"text"]];

    name =[[NSMutableArray alloc] init];
    [name addObject:[[dict0 valueForKey:@"name"] valueForKey:@"text"]];

当我打印ID和名称数组时,我看到了:

代表ID:

(
(1,
 2
)
)

代名:

(
(
"name 1",
"name 2"
)
)

但Xcode显示name.count = 1,当我尝试使用id和name实现cellForRowAtIndexPath时,发生错误:

 [__NSArrayI length]: unrecognized selector sent to instance 0x10b102830
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException'

如何解决这个问题,我的代码在单个元素和更多元素时能正常工作?

1 个答案:

答案 0 :(得分:2)

您首先显示的数据结构看起来像是包含字典的外部字典,其中的项目包含的数组又包含更多字典。

从ID获取文本对象的代码如下所示:

//get the dictionary at key "result"
NSDictionary result = _xmlDictionary[@"result"]; 

//Get the array at key "id" in result dict
NSArray the_id = result[@"id"];  

//Get the object at index 0 in the array 
NSDictionary objAtIndex0 = the_id[0];  

//Get the object at key "text" in the dictionary
NSString *text = objAtIndex0[@"text"];  

或者,一起排在一行:

NSString *text = _xmlDictionary[@"result"][@"id"][0][@"text"];