У меня есть NSDictionary, который я получаю данные из файла XML.
XML-файл выглядит так:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<root>
<customer>
<areas>
<area>
<company>ABC</company>
<state>OO</state>
<area_name>Somename</area_name>
<count>123</count>
<total_custs>123123</total_custs>
</area>
<area>
<company>BCD</company>
<state>EE</state>
<area_name>Somename2</area_name>
<count>1233</count>
<total_custs>11233</total_custs>
</area>
</areas>
</customer>
</root>
Я прочитал этот xml в NSDictionary
, скажем myDict
, затем я хочу сохранить его в NSMutableArray
, скажем myArray
, я использую:
myArray = [[NSMutableArray alloc] initWithArray:[[[[myDict objectForKey:@"root"] objectForKey:@""customer"] objectForKey:@"areas"] objectForKey:@"area"]] autorelease];
Это прекрасно работает, если у меня ноль или два или более <area>
, но сбой, если у меня только один, точно так же, как я показал выше.
Вот некоторая информация, которая, на мой взгляд, может быть полезна,
2011-08-12 09:04:40.343 TEST[28595:ef03] -[__NSCFDictionary getObjects:range:]: unrecognized selector sent to instance 0x588af50
2011-08-12 09:04:40.345 TEST[28595:ef03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary getObjects:range:]: unrecognized selector sent to instance 0x588af50'
Часть стека вызовов:
0 CoreFoundation 0x011fc5a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x01350313 objc_exception_throw + 44
2 CoreFoundation 0x011fe0bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x0116d966 ___forwarding___ + 966
4 CoreFoundation 0x0116d522 _CF_forwarding_prep_0 + 50
5 CoreFoundation 0x011f7fc5 -[NSArray initWithArray:range:copyItems:] + 245
6 CoreFoundation 0x0115fdc0 -[NSArray initWithArray:] + 96
EDIT:
Я думаю, что мог бы просто иметь представление о том, что происходит, поэтому я добавляю оператор if-else, подобный этому:
if ([[[[[myDict objectForKey:@"root"] objectForKey:@""customer"] objectForKey:@"areas"] objectForKey:@"area"] isKindOfClass:[NSArray class]]) {
ALog(@"is array!");
}
else
{
ALog(@"not array!");
}
Когда есть только один элемент, он дает мне «нет массива», но я все еще использую initWithArray
, чтобы создать свой NSMutableArray.
Таким образом, я могу проверить, является ли объект типом, используя isKindOfClass
, есть ли способ просто сказать мне, что это за объект?