Matriz de iPhone plist
-
13-09-2019 - |
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 ...
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"];