Array da iPhone plist
-
13-09-2019 - |
Domanda
Sto cercando di ottenere una matrice da un plist come suggerito in una risposta qui, ma non funziona.Qualcuno può dirmi cosa mi manca?
Ecco cosa plist sembra....un'altra cosa strana è che io non riesco a farlo aprire in un file di testo??quando mi sembra di immondizia.....ma si guarda bene in property list editor:
<?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>
Ecco il codice che sto utilizzando.....il dizionario è un NSMUtableDictionary e accountsArray è un NSMustableArray che sono nella .h file.
NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
dictionary = tempDictionary;
[tempDictionary release];
NSMutableArray *nameArray = [[NSMutableArray alloc] init];
nameArray = [dictionary objectForKey:@"username"];
accountsArray = nameArray;
[nameArray release];
Mi manca qualcosa?Avvitare qualcosa?
Grazie...
Soluzione 2
Alla fine ho capito di lavoro in questo modo:
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"];
Altri suggerimenti
Beh, ci sono un certo numero di questioni in corso di realizzazione;prima di tutto plist è probabilmente un binario di proprietà, e non si tratta di un XML elenco di proprietà.Questo non ha molta importanza sul codice lato delle cose, ma deve servire a spiegare i problemi con l'apertura come testo normale.
Secondo, rilasciando tempDictionary
, si sono, inoltre, il rilascio di dictionary
, in quanto entrambi puntano allo stesso oggetto.Questo dovrebbe servire a spiegare perché il tuo codice non funziona.Provare autorelease
, o , semplicemente, dictionaryWithContentsOfFile:
e nix il rilascio frase complessivamente.(dictionaryWithContentsOfFile:
sarà autorelease il suo valore di ritorno.)
Si anche ripetere il rilascio errore sulla seconda frase;l'operatore di assegnazione (=
) non copia in Objective-C;si assegna.
Edit:Quest'ultimo non è vero quando si utilizza la proprietà di notazione;supponendo che le proprietà sono definite; self.accountsArray = nameArray
sarebbe (probabilmente) copia dell'array in oggetto.
Rieditare:Il codice corretto:
dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath];
accountsArray = [dictionary objectForKey:@"username"];