Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSDictionary objectForKey-需要一个包含一个元素而不仅仅是元素的NSArray_Ios_Nsdictionary - Fatal编程技术网

Ios NSDictionary 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

我不熟悉objective-c,需要一些帮助。在下面的代码中,如果xml只包含一个元素,那么objectForKey调用将生成一个元素,而不是一个包含一个元素的NSArray。我应该如何更新代码以确保行:

[[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]保存]}确切地说,我写了什么……除此之外,作者将对象封装在数组中,然后将它传递给方法。