我有一个由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";
}
)
任何人都有我可以使用的想法吗?如果我要添加更多代码,请在评论中表达。谢谢!
答案 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)
results
是NSDictionary
还是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]);
}