2009-05-07 2 views
0

Как получить данные массива, хранящиеся в файле plist.Извлечение данных массива, хранящихся в plist Файл

PLIST файл и исходный код, как показано ниже,

------------------------plist File------------------------- 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Name</key> 
    <string>abcxxx</string> 
    <key>Phones</key> 
    <array/> 
    <key>item1</key> 
    <string>121327777</string> 
    <key>item2</key> 
    <string>333333333</string> 
</dict> 
</plist> 
--------------------------------------------------------- 



    -(id) init 
{ 


    NSString *errorDesc = nil; 
    NSPropertyListFormat format; 
    phoneNumbers =[[NSMutableArray alloc]init]; 
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"testfile" ofType:@"plist"]; 
    NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath]; 

    NSDictionary *temp = (NSDictionary *)[NSPropertyListSerialization 
              propertyListFromData:plistXML 
              mutabilityOption:NSPropertyListMutableContainersAndLeaves 
              format:&format errorDescription:&errorDesc]; 

    if(!temp){ 
     NSLog(errorDesc); 
     [errorDesc release]; 
    } 
    self.personName = [temp objectForKey:@"Name"]; 
    self.phoneNumbers = [NSMutableArray arrayWithArray:[temp objectForKey:@"Phones"]]; 
    NSLog(@"Label executed %@",[phoneNumbers objectAtIndex:0]); 

    UILabel *name = [[UILabel alloc]initWithFrame:CGRectMake(-180, 100, 100, 20)]; 
    name.text = [phoneNumbers objectAtIndex:1]; 
    [self addChild:name]; 
    NSLog(@"Label executed %@",name); 
+0

Вы не говорите, что фактическая проблема. Каковы симптомы? –

ответ

1

Ваш PLIST XML выглядит немного подозрительно. Тег <array/>, который у вас есть, является только автономным тегом, который я не уверен в том, что сделаю что-нибудь полезное.

Возможно изменить PLIST на что-то вроде этого:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>Name</key> 
    <string>abcxxx</string> 
    <key>Phones</key> 
    <array> 
     <string>121327777</string> 
     <string>333333333</string> 
    </array> 
</dict> 
</plist> 

Я не уверен, будет ли это поможет ж/код. Прочитали ли вы эту документацию?

http://developer.apple.com/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html

0

Все, что вам нужно сделать, это позвонить NSDictionary в initWithContentsOfFile: метод. Например

NSDictionary *temp = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; 
self.personName = [temp objectForKey:@"Name"]; 
self.phoneNumbers = [[temp objectForKey:@"Phones"] mutableCopy]; 

Однако, как уже упоминалось выше, ваш PLIST действительно выглядит немного подозрительным, попробуйте изменить его на один Энди Уайт также предоставляются.

С уважением,

Kyle

+0

Это не делает все контейнеры и листья изменчивыми, хотя техника NSPropertyListSerialization делает это. – dreamlax

0

Рама UITextField также странно (в зависимости от кадра SELF в) CGRectMake(-180, 100, 100, 20), вероятно, закадровый.

0

Скорее всего ваш просто не в состоянии прочитать PLIST, просто проверить структуру Plist,

NSString *StringsFromPList = [[NSBundle mainBundle] bundlePath]; 
NSString *itemPositionPlistLocation = [StringsFromPList stringByAppendingPathComponent:@"Words.plist"]; 
_myDictionary= [[NSDictionary alloc] initWithContentsOfFile:itemPositionPlistLocation]; 
NSArray * items = [_myDictionary objectForKey:@"Root"]; 


<plist version="1.0"> 
<dict> 
<key>Root</key> 
    <array> 
     <string>Happy</string> 
     <string>Rain</string> 
    </array> 

Надеется, что это помогает :)

Смежные вопросы