NSDictionary没有正确循环

时间:2015-11-11 04:10:23

标签: ios objective-c

我有一个由AFNetworking类创建的NSDictionary,但现在我想将该NSDictionary转换为我所创建的类的对象数组。我尝试使用for-in循环如下:

    for (NSDictionary *item in results)
        [_masterList addObject:[[MyObject alloc]initWithType:[item objectForKey:@"type"];
顺便说一下,{p> results是我的NSDictionary。没有语法错误,但是当我运行程序时,什么都没有出现。我在for-in中尝试了NSLog,但没有得到任何东西,这意味着循环甚至不会运行一次。我很确定NSDictionary是完整的,因为我在AFNetworking过程中NSLog编了结果,它已经满了:

( { address = "Sample Address"; } )

任何人都有我可以使用的想法吗?如果我要添加更多代码,请在评论中表达。谢谢!

3 个答案:

答案 0 :(得分:0)

没有键type,请将其更改为address

for (NSDictionary *item in results)
    [_masterList addObject:[[MyObject alloc]initWithType:[item objectForKey:@"address"];

答案 1 :(得分:0)

答案不是很多,但评论太大了:除了提供的代码之外,你犯了一个错误。尝试:

NSArray *results = @[
    @{
        @"address": @"Sample Address"
    }
];

NSLog(@"%@", results);

for (NSDictionary *item in results)
    NSLog(@"%@ (%@)", item, [item objectForKey:@"address"]);

输出是:

2015-11-10 23:20:22.713 Untitled[1564:1904151] (
        {
        address = "Sample Address";
    }
)
2015-11-10 23:20:22.715 Untitled[1564:1904151] {
    address = "Sample Address";
} (Sample Address)

所以,绝对是相同的字典,然后是相同的迭代代码,结果正确。

附录,可能有用也可能没有帮助:Apple提供的利用Objective-C反射运行时的东西之一是键值编码,假设您的属性遵守某些规则,允许它们按名称写入。如果你有一个字典,你想通勤一个对象,并进行了适当的验证,那么你可能会:

NSDictionary *inputDictionary = ... whatever ...
SomeObject *target = [[SomeObject alloc] init];

for (NSString *key in inputDictionary)
    [target setValue:inputDictionary[key] forKey:key];

与Objective-C规范相反,但与大多数现代语言一致,如果密钥不作为target上的属性存在,则会引发异常。因此,在生产代码中,如果字典来自远方,您可能至少需要一个try / catch块。

答案 2 :(得分:0)

resultsNSDictionary还是NSArray词典?如果它是NSDictionary那么你必须像这样循环:

// loop through each key in dictionary
// let say your key type is NSString
for (NSString* key in results) {

    // access your object for key here
    NSLog(@"%@", results[key]);
}