Ios NSDictionary objectForKey-需要一个包含一个元素而不仅仅是元素的NSArray
我不熟悉objective-c,需要一些帮助。在下面的代码中,如果xml只包含一个元素,那么objectForKey调用将生成一个元素,而不是一个包含一个元素的NSArray。我应该如何更新代码以确保行:Ios NSDictionary objectForKey-需要一个包含一个元素而不仅仅是元素的NSArray,ios,nsdictionary,Ios,Nsdictionary,我不熟悉objective-c,需要一些帮助。在下面的代码中,如果xml只包含一个元素,那么objectForKey调用将生成一个元素,而不是一个包含一个元素的NSArray。我应该如何更新代码以确保行: [[ApplicationManager sharedInstance] setTags:[[result objectForKey:XML_OPTION_LIST] objectForKey:XML_OPTION]]; 即使xml包含零或一个元素,也始终使用NSArray调用setTags
[[ApplicationManager sharedInstance] setTags:[[result objectForKey:XML_OPTION_LIST] objectForKey:XML_OPTION]];
即使xml包含零或一个元素,也始终使用NSArray调用setTags
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选项列表元素包含一个或多个选项元素。只有一个选项元素时,错误才会发生在此代码范围之外。
非常感谢您的帮助。发生此错误是因为您试图将objectForKey:message发送到非NSDictionary实例的某个对象 您将包括一个测试来检测它,并根据测试结果直接通过setTags:method元素
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];
}
您可以测试对象是否属于特定的类。您可以在这里测试:[myObject是Kindof类:[NSArray类]],它将告诉您是否有数组。一个问题,如果XML包含零元素,您会得到什么?好问题!我知道,我还需要检查零元素。问题是这个位:[[result objectForKey:XML\u OPTION\u LIST]objectForKey:XML\u OPTION]]似乎返回了预期的NSArray,或者返回了某种类型的单个元素,我不确定是哪一个。在调试器中,如果XML_OPTION_列表包含多个选项标记,我会得到:po[[ApplicationManager sharedInstance]activityCategories]{DELETABLE={……这是正确的。如果OPTION_列表元素中只有一个选项标记,那么在调试模式下我会得到:po[[ApplicationManager sharedInstance]activityCategories]{DELETABLE={….您不可能有一个数组,您不能将objectForKey:发送到数组。如果是这种情况,请使用objectAtIndex:并对[NSArray class]进行测试我的意思是,不可能将objectForKey:发送到数组,也不是说不可能获得数组…我在这里发现了一个类似的问题:NSDictionary objectForKey返回值,并像这样解决它:if[[[result objectForKey:XML\u ERROR\u CODE]objectForKey:XML\u TEXT]IsequalString:XML\u ERROR\u NONE]{NSArray*myarr=[[result objectForKey:XML_OPTION_LIST]objectForKey:XML_OPTION];if![myarr是类的种类:[NSArray类]{myarr=[NSArray arrayWithObject:myarr];}[[ApplicationManager sharedInstance]SetActivityLevel:myarr];[ApplicationManager sharedInstance]保存]}确切地说,我写了什么……除此之外,作者将对象封装在数组中,然后将它传递给方法。