2009-07-13 5 views
0

Ich versuche, ein Array von einem PLIST zu bekommen, wie auf einer Antwort hier vorgeschlagen, aber es funktioniert nicht. Kann mir jemand sagen, was ich vermisse?Array von iPhone plist

Hier ist, was das Plist aussieht .... eine andere seltsame Sache ist, dass ich nicht das in einer einfachen Textdatei öffnen kann ?? wenn ich es sieht aus wie Müll ..... aber es sieht in der Eigenschaftsliste Editor fein:

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

Hier ist der Code ich verwende ..... Wörterbuch ein NSMutableDictionary ist und accountsArray ist ein NSMustableArray, die sich in der H-Datei befinden.

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

dictionary = tempDictionary; 
[tempDictionary release]; 


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

accountsArray = nameArray; 

[nameArray release]; 

bin ich etwas fehlt? Etwas hochschrauben?

Danke ...

Antwort

0

ich es endlich wie diese Arbeit:

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

tatsächlich, habe ich folgendes: \t if (accountsArray == null) { \t \t \t \t accountsArray = [[[NSMutableArray alloc] init] Autofreigabe]; } \t \t \t if (countArray == null) { \t \t \t \t countArray = [[[NSMutableArray alloc] init] Autofreigabe]; \t} – Xcoder

+0

-1. mach das nicht. Dieser Code ist in jeder Hinsicht falsch. – shader

+0

Was ist falsch an dem Code? – icant

5

Nun, es gibt eine Reihe von Problemen im Gange; Zuallererst ist das Plist wahrscheinlich eine binäre Eigenschaftenliste und keine tatsächliche XML-Eigenschaftsliste. Dies ist nicht sehr wichtig auf der Code-Seite der Dinge, aber sollte dazu dienen, die Probleme mit dem Öffnen als Klartext zu erklären.

Zweitens, indem Sie freigeben, geben Sie auch dictionary frei, da beide auf dasselbe Objekt zeigen. Dies sollte erklären, warum Ihr Code nicht funktioniert. Versuchen Sie autorelease, oder einfach dictionaryWithContentsOfFile: und nix die Freigabephrase allogether. (dictionaryWithContentsOfFile: wird seinen Rückgabewert automatisch freigeben.)

Sie wiederholen auch den Freigabefehler bei der zweiten Phrase; der Zuweisungsoperator (=) kopiert nicht in Objective-C; es weist zu.

Edit: Letzteres ist nicht wahr, wenn die Eigenschaftsnotation verwendet wird; unter der Annahme, dass Eigenschaften definiert sind; self.accountsArray = nameArray würde (wahrscheinlich) das Array in das Objekt kopieren.

reedit: Korrekter Code:

dictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:accountsFilePath]; 
accountsArray = [dictionary objectForKey:@"username"]; 
+0

ich das jetzt tue, und jetzt bin ich Absturz .... \t Wörterbuch = [NSMutableDictionary dictionaryWithContentsOfFile: accountsFilePath]; \t \t if (accountsArray == null) { \t \t \t \t accountsArray = [[NSMutableArray alloc] init]; } \t \t \t \t NSMutableArray * Namearray = [[NSMutableArray alloc] init]; \t nameArray = [dictionary objectForKey: @ "Benutzername"]; \t \t \t accountsArray = NameArray; \t \t [NameArray Release]; – Xcoder