我有一个for循环遍历字典的词典。它工作得很好,除非只有一个字典总数。如何在只有一个字典可用时通过字典或字典访问for循环中的局部变量?
这里是我的方法的要点:
- (NSArray *)objectsFromJSON:(NSString *)jsonString error:(NSError **)error
{
NSParameterAssert(jsonString != nil);
// create JSON object
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *localError = nil;
id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&localError];
NSDictionary *dictionaryOfDictionaries = (id)jsonObject;
// if not parsed successfully, error
if(dictionaryOfDictionaries == nil)
{
if(error != NULL)
{
*error = [NSError errorWithDomain:ErrorDomain code:MissingDataError userInfo:nil];
}
return nil;
}
// else create objects out of parsed data
NSMutableArray *objectsArray = [NSMutableArray array];
for(NSDictionary *objectDictionary in dictionaryOfDictionaries)
{
// required properties
Obj *object = [[Obj alloc]
initWithName:objectDictionary[@"name"]
Street:objectDictionary[@"street"]
City:objectDictionary[@"city"]
State:objectDictionary[@"state"]
];
// if error, return
if(object == nil)
{
if(!error)
{
*error = [NSError errorWithDomain:ErrorDomain code:MissingDataError userInfo:nil];
}
return nil;
}
// else add to array of objects created successfully
[objectsArray addObject:object];
}
return [objectsArray copy];
}
如前所述,这工作正常 - 即所有的object
S的成功创建了objectDictionary
的 - 如果有在dictionaryOfDictionaries
不止一个字典。但是,如果只有一个词典,objectDictionary
最后在for循环(而不是Obj
)中输入id
,并尝试访问其值(如objectDictionary[@"name"]
)会导致错误。
如何最有效地写这个,以便处理一个字典的情况?
什么是objectDictionary'的'实际类型时,只有一个解释? – rmaddy 2014-10-17 20:02:51
一个词典案例中的错误是什么? – Paulw11 2014-10-17 20:14:43
我猜测,当只有一个字典返回给你时,它不会打包到数组中,而是直接返回。你应该检查'dictionaryOfDictionaries'的类型。 – 2014-10-17 20:55:18