2017-08-01 56 views
-2

我有一个NSArray,看起来像下面遍历对象的NSArray有没有id的 - 目标C

[{ 
    "Id":"456", 
    "Type":"Dog", 
    "Sound":"Bark", 
}, 
{ 
    "Id":"789", 
    "Type":"Cat", 
    "Sound":"Meow", 
}] 

我尝试以下

for (id key in array) { // Doesn't work 
    NSLog(@"%@", key[@"Type"]); 
} 

,我试图

NSLog(@"%@", [array firstObject]); // Doesn't work 

但是这不起作用,因为没有id可以访问。两个都得到了NSInvalidArgumentException。我将如何成功地遍历我拥有的两个对象并打印出该类型?

+0

看起来你的数组变量不是NSArray的子​​类。添加breakepoint并检查它。 – antonsergeev88

+2

是的,你的代码看起来很好。阵列如何设置?你怎么知道内容是什么?发布该代码,你会更有可能得到一个有用的答案。 –

+2

如果'[array firstObject]'给你一个'NSInvalidArgumentException',那么'array'不是'NSArray'。阅读错误信息并查看实际情况。 –

回答

1

这是一个有点混乱,因为你说:

I have an NSArray that looks like the following 

[{ 
    "Id":"456", 
    "Type":"Dog", 
    "Sound":"Bark", 
}, 
{ 
    "Id":"789", 
    "Type":"Cat", 
    "Sound":"Meow", 
}] 

但后来,你也说:

的NSLog(@ “%@”,[阵列firstObject] ); //不起作用

当然,你不指出​​什么“不工作”的意思是......它会抛出一个错误吗?它什么都不输出?它输出的是什么,但不是你所期望的?

但是,如果您没有有一个数组,“看起来像”,那么让我们来看看它实际上是什么...

我们可以把字典为:

{ key1:value1, key2:value2, key3:value3, etc... } 

我们可以想像,一个数组为:

[object1, object2, object3, etc...] 

因此,假设您的示例数据结构化就像有效的NSArray那样,这意味着你有一个2个字典对象的数组。如果你想将它们输出到控制台,你可以这样做:

// log the first object in the array 
NSLog(@"%@", [array firstObject]); 

和输出应该是一个字典:

{ 
    Id = 456; 
    Sound = Bark; 
    Type = Dog; 
} 

你也可以这样做:

// for each element (each Dictionary) in array, output the dictionary 
for (NSDictionary *d in array) { 
    NSLog(@"%@", d); 
} 

产生于:

...[1234:4321] { 
    Id = 456; 
    Sound = Bark; 
    Type = Dog; 
} 

...[1234:4321] { 
    Id = 789; 
    Sound = Meow; 
    Type = Cat; 
} 

,最后:

// for each element (each Dictionary) in array 
for (NSDictionary *d in array) { 
    // for each Key in each Dictionary 
    for (NSString *key in [d allKeys]) { 
     NSLog(@"%@ - %@", key, d[key]); 
    } 
} 

,这将给你:

...[1234:4321] Sound - Bark 
...[1234:4321] Id - 456 
...[1234:4321] Type - Dog 
...[1234:4321] Sound - Meow 
...[1234:4321] Id - 789 
...[1234:4321] Type - Cat 

注意词典是*未排序的,所以不要指望每次按照相同的顺序逐个按键。

希望是有道理的。当然,如果你不这样做,你仍然需要找出为什么你认为你有一个NSArray。

+0

谢谢,我得到的错误是“终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [__ NSCFString firstObject]:无法识别的选择发送到实例0x600000253e00' ”,这导致我认为你是正确的时候说它不是一个NSArray。但是为什么我能够创建一个看起来像这样的NSArray呢?如果我有一个NSDictionary看起来是一样的,那也是不正确的? –

+0

你是什么意思*“看起来像这样”*?你怎么看“那个”?你如何创建你正在看的任何对象?它来自哪里? – DonMag