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



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

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

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 个字典对象的数组。如果要将它们输出到控制台,可以执行以下操作:

// 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,而你没有。

最新更新