Pergunta

Eu estou tentando obter uma matriz de um plist como sugerido em uma resposta aqui, mas ele não está funcionando. Alguém pode me dizer o que eu estou perdendo?

Aqui está o que os olhares plist gosto .... outra coisa estranha é que eu não posso chegar a este abrir em um arquivo de texto simples ?? quando eu faço parece que lixo ..... mas parece bom no editor de lista de propriedades:

<?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>

Aqui está o código que estou usando ..... dicionário é uma NSMutableDictionary e accountsArray é um NSMustableArray que estão no arquivo .h.

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

 dictionary = tempDictionary;
 [tempDictionary release];


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

 accountsArray = nameArray;

 [nameArray release];

Estou faltando alguma coisa? Estragar alguma coisa?

Obrigado ...

Foi útil?

Solução 2

Eu finalmente tenho que trabalhar assim:

    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"];

Outras dicas

Bem, há uma série de questões em progresso; antes de tudo o plist é provavelmente uma lista de propriedades binário, e não na verdade uma lista de propriedades XML. Isso não importa muito no lado do código de coisas, mas deve servir para explicar os problemas com a abertura como texto simples.

Em segundo lugar, liberando tempDictionary, você também está liberando dictionary, já que ambos apontam para o mesmo objeto. Isto deve servir para explicar por que seu código não funciona. Tente autorelease, ou simplesmente dictionaryWithContentsOfFile: e nix a frase liberação alltogether. (dictionaryWithContentsOfFile: vai autorelease seu valor de retorno.)

Você também repetir o erro na segunda frase libertação; o operador de atribuição (=) não copia em Objective-C; it cessionários .

Edit: O último não é verdadeiro quando usando a notação de propriedade; assumindo que as propriedades são definidos; self.accountsArray = nameArray que (provavelmente) copiar a matriz no objeto.

reeditar: código correto:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
accountsArray = [dictionary objectForKey:@"username"];
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top