Как программно узнать, что является корневым элементом plist, то есть, массив это или словарь?
Попробуйте следующее:
NSData *plistData; NSString *error; NSPropertyListFormat format; id plist; NSString *localizedPath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"plist"]; plistData = [NSData dataWithContentsOfFile:localizedPath]; plist = [NSPropertyListSerialization propertyListFromData:plistData mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error]; if([plist isKindOfClass:[NSDictionary class]]){ //do some ... } if([plist isKindOfClass:[NSArray class]]){ //do some ... }
Дополнительное чтение от Apple.
Загрузите лист с +[NSPropertyListSerialization propertyListFromData:…], затем проверьте -class полученного объекта.
+[NSPropertyListSerialization propertyListFromData:…]
-class
Вы не должны использовать метод класса для этого. Используйте isSOBject isKindOfClass: (или isMemberOfClass :), чтобы проверить, является ли класс объекта [NSArray class] или [NSDictionary class].
см .: + [Класс NSObject]
Вот основной способ:
if (CFGetTypeID((CFPropertyListRef)myPropertyList) == CFDictionaryGetTypeID()) { // its a dictionary }