Plist-Array NSDictionary
Ich habe eine plist:
<plist version="1.0">
<array>
<dict>
<key>name</key>
<string>Alabama</string>
<key>abreviation</key>
<string>AL</string>
<key>date</key>
<string>1819</string>
<key>population</key>
<string>4,627,851</string>
<key>capital</key>
<string>Montgomery</string>
<key>largestCity</key>
<string>Birmingham</string>
</dict>
<dict>
<key>name</key>
<string>Alaska</string>
<key>abreviation</key>
<string>AK</string>
<key>date</key>
<string>1959</string>
<key>population</key>
<string>683,478</string>
<key>capital</key>
<string>Juneau</string>
<key>largestCity</key>
<string>Anchorage</string>
</dict>
...
</array>
</plist>
Ich versuche, laden Sie Sie in einem NSDictionary wie diese:
NSString *path = [[NSBundle mainBundle] pathForResource:@"stateInfo" ofType:@"plist"];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
NSLog(@"The file exists");
} else {
NSLog(@"The file does not exist");
}
NSMutableDictionary *myDic = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
//NSDictionary *myDic = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"The count: %i", [myDic count]);
NSArray *thisArray = [[NSArray alloc] initWithContentsOfFile:path];
NSLog(@"The array count: %i", [thisArray count]);
Bekomme ich immer ein array-count von 50 aber in einem Wörterbuch count von null. Also versuchte ich die Schleife durch das array und hinzufügen zum Wörterbuch:
NSDictionary *eachState;
for (eachState in thisArray) {
State *thisState = [[State alloc] initWithDictionary:eachState];
[myDic setObject:thisState forKey:thisState.name];
}
Aber die Schleife ist eine Ausnahme:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[NSCFDictionary setObject:forKey:]: mutating method sent to immutable object'
Staat ist eine Klasse mit Eigenschaften passend zu meiner plist. Was mache ich falsch? Ich sehe alle Arten von Fragen hier, aber ich kann es nicht bekommen.
Ich habe es. Ich hatte ein Konflikt und NsMutableDictionary zugeordnet wurde, als ein NSDictionary.
Und natürlich, ich habe diesen Kommentar erst, nachdem ich gepostet meine Antwort.
Und natürlich, ich habe diesen Kommentar erst, nachdem ich gepostet meine Antwort.
InformationsquelleAutor Bryan | 2009-08-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei Probleme:
Dies ist ein einfaches problem, das es scheint, Sie haben bereits herausgefunden. Das Globale Objekt in deine plist ist ein array, kein dict, also, wenn Sie laden Sie es in das Wörterbuch ein, weiß er nicht, was zu tun ist (incompatable Arten), Sie sind also immer eine leere Wörterbuch.
Von der Ausnahme, die Sie bekommen haben, die Sie anrufen 'setObject:forKey:" auf dem Wörterbuch, das initialisiert ein NSDictionary, nicht ein NSMutableDictionary. Der Zeiger typisiert als NSMutableDictionary, aber nicht die tatsächliche im Speicher-Objekt. Sie brauchen, um Ihre Linie aus.
zu
und tatsächlich, da laden Sie das Wörterbuch aus der Datei bietet ein leeres dictionary, verschwenden Sie Zyklen versucht, aus der Datei laden, und sollte nur eine neue erstellen:
InformationsquelleAutor bobDevil
Flexiblere Art und Weise zu laden plists in den Speicher, die auch ermöglicht Ihnen das erstellen änderbarer plists:
Somit ist dein code umgesetzt werden könnten:
Das format-argument ist ein argument, also das Beispiel ist nicht ganz richtig, hier (und nicht kompiliert wird). Auch das Ergebnis ist nicht zwingend ein array. Ich soll es sein könnte, aber das Ergebnis könnte auch ein Wörterbuch, zum Beispiel. Insgesamt, ich denke, das ist eine gute Ergänzung zu den Antworten für die Frage.
InformationsquelleAutor PeyloW