Массив из айфона плист - PullRequest
0 голосов
/ 14 июля 2009

Я пытаюсь получить массив из списка, как предлагается в ответе здесь, но он не работает. Может кто-нибудь сказать мне, что мне не хватает?

Вот как выглядит 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>count</key>
<array>
     <integer>5</integer>
</array>
<key>username</key>
<array>
     <string>johnsmith</string>
</array>
</dict>
</plist>

Вот код, который я использую ..... словарь - это NSMUtableDictionary, а accountArray - это NSMustableArray, который находится в файле .h.

     NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];

 dictionary = tempDictionary;
 [tempDictionary release];


 NSMutableArray *nameArray = [[NSMutableArray alloc] init];
 nameArray = [dictionary objectForKey:@"username"];

 accountsArray = nameArray;

 [nameArray release];

Я что-то упустил? Что-то напортачило?

Спасибо ...

Ответы [ 2 ]

5 голосов
/ 14 июля 2009

Ну, есть ряд проблем в движении; во-первых, plist, вероятно, является списком двоичных свойств, а не списком свойств XML. Это не имеет большого значения с точки зрения кода, но должно служить для объяснения проблем с открытием в виде простого текста.

Во-вторых, выпуская tempDictionary, вы также выпускаете dictionary, так как они оба указывают на один и тот же объект. Это должно объяснить, почему ваш код не работает. Попробуйте autorelease или просто dictionaryWithContentsOfFile: и полностью исключите фразу выпуска. (dictionaryWithContentsOfFile: автоматически вернет свое возвращаемое значение.)

Вы также повторяете ошибку выпуска для второй фразы; оператор присваивания (=) не копируется в Objective-C; это присваивает .

Редактировать: Последнее не верно при использовании записи свойства; предполагая, что свойства определены; self.accountsArray = nameArray (вероятно) скопирует массив в объект.

Reedit: Правильный код:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
accountsArray = [dictionary objectForKey:@"username"];
0 голосов
/ 14 июля 2009

Наконец-то я заработал:

    dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];      


 if (accountsArray == nil){

     accountsArray = [[NSMutableArray alloc]init];
 }

 if (countArray == nil){

     countArray = [[NSMutableArray alloc]init];
 }



 countArray = [dictionary objectForKey:@"count"];
 accountsArray = [dictionary objectForKey:@"username"];
...