循环遍历没有id的对象的NSArray - Objective C

时间:2017-08-01 20:33:25

标签: ios objective-c arrays nsarray

我有一个NSArray,如下所示

[{
   "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。我如何成功遍历我拥有的两个对象并打印出类型?

1 个答案:

答案 0 :(得分:1)

这有点令人困惑,因为你说:

I have an NSArray that looks like the following

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

但是,你也说:

  

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

当然,你没有说明“不工作”是什么意思......是否会引发错误?它什么都没输出?它会输出一些东西,但不是你期望的东西吗?

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

我们可以将词典视为:

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

我们可以将数组视为:

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

因此,假设您的示例数据 结构与有效NSArray中的结构相似,则表示您拥有一个包含2个Dictionary对象的数组。如果要将它们输出到控制台,可以执行以下操作:

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

,输出应为Dictionary:

{
    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的原因。