Как программно найти, что является корневым элементом plist - PullRequest
0 голосов
/ 19 марта 2010

Как программно узнать, что является корневым элементом plist, то есть, массив это или словарь?

Ответы [ 4 ]

2 голосов
/ 20 марта 2010

Попробуйте следующее:

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.

2 голосов
/ 19 марта 2010

Загрузите лист с +[NSPropertyListSerialization propertyListFromData:…], затем проверьте -class полученного объекта.

0 голосов
/ 19 марта 2010

Вы не должны использовать метод класса для этого. Используйте isSOBject isKindOfClass: (или isMemberOfClass :), чтобы проверить, является ли класс объекта [NSArray class] или [NSDictionary class].

см .: + [Класс NSObject]

0 голосов
/ 19 марта 2010

Вот основной способ:

if (CFGetTypeID((CFPropertyListRef)myPropertyList) == CFDictionaryGetTypeID()) {
    // its a dictionary
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...