我是objective-c的新手,需要一些帮助。在下面的代码中,如果xml只包含一个元素,那么objectForKey调用将产生一个元素而不是一个只有一个元素的NSArray。我应该如何更新代码以确保行:
[[ApplicationManager sharedInstance] setTags:[[result objectForKey:XML_OPTION_LIST] objectForKey:XML_OPTION]];
总是用NSArray调用setTags(即使xml包含零个或一个元素)?
NSString *XMLResponse = [request responseString];
NSError *parseError = nil;
NSDictionary *xmlDictionary = [XMLReader dictionaryForXMLString:XMLResponse error:&parseError];
NSDictionary *result = [xmlDictionary objectForKey:XML_RESULT];
if ([[[result objectForKey:XML_ERROR_CODE] objectForKey:XML_TEXT] isEqualToString:XML_ERROR_NONE]) {
[[ApplicationManager sharedInstance] setTags:[[result objectForKey:XML_OPTION_LIST] objectForKey:XML_OPTION]];
[[ApplicationManager sharedInstance] save];
}
xml OPTION_LIST元素包含一个或多个OPTION元素。只有一个OPTION元素时才会发生错误(不在此代码的范围内)。我感谢你的帮助。
由于尝试将objectForKey:
消息发送到某个不是NSDictionary
实例的对象,因此会发生此错误。
您将包含一个检测该元素的测试,并根据测试结果直接传递该元素的setTags:
方法。
if([[[result objectForKey:XML_ERROR_CODE] objectForKey:XML_TEXT] isEqualToString:XML_ERROR_NONE]) {
if([[result objectForKey:XML_OPTION_LIST] isKindOfClass:[NSDictionary class]]) {
[[ApplicationManager sharedInstance] setTags:[[result objectForKey:XML_OPTION_LIST] objectForKey:XML_OPTION]];
}
else {
[[ApplicationManager sharedInstance] setTags:[result objectForKey:XML_OPTION_LIST]];
}
[[ApplicationManager sharedInstance] save];
}