2009-07-30 19 views
1

Ich versuche, eine NSArray von einer .plist-Datei zu erstellen, aber ich erhalte diesen Fehler:Fehler beim Erstellen eines Nsarray von Plist?

'NSUnknownKeyException', reason: '[<NSCFString 0x5bbca60> valueForUndefinedKey:]: this class is not key value coding-compliant for the key Value1.'

In der .plist-Datei, ich habe einen Schlüssel „Punkt 1“ und eine Zeichenfolgewert namens "Value1". Dann im Code ich habe eine NSArray aus dieser Datei erstellt werden:

-(void)recordValues:(id)sender { 

    // read "propertyList.plist" values 
    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"propertyList" ofType:@"plist"]; 
    originalArray = [[NSArray alloc] initWithContentsOfFile:plistPath]; 

    // dump the contents of the array to the log 
    for (id key in originalArray) { 
     NSLog(@"bundle: key=%@, value=%@", key, [originalArray valueForKey:key]); 
    } 

    //create an NSMutableArray containing the 
    //user's score and the values from originalArray 
    NSMutableArray *newArray = [NSMutableArray arrayWithObjects:[NSNumber numberWithFloat:userScore], nil]; 
    [newArray addObjectsFromArray:array]; 

    //write xml representation of mutableArray back to propertyList 
    [newArray writeToFile:plistPath atomically:NO]; 

} 

    } 
+0

Ehrlich gesagt kann ich einfach nicht sagen, was Sie versuchen zu tun. Eine etwas genauere Sprache, bitte? – Amagrammer

+0

Sicher! Ich habe eine Eigenschaftsliste, die ein Array ist. Dies sind im Grunde wie Highscores in einem Spiel. Wenn jemand das Spiel spielt, füge ich seine Punkte einem brandneuen NSMutableArray hinzu. Dann nehme ich dieses neue veränderbare Array und kombiniere es mit den Highscores aus meiner Property-Liste und schreibe die gesamte Sammlung zurück in die ursprüngliche plist-Datei. Aber ich bekomme einen Fehler und ich weiß nicht warum. Ist das sinnvoll? – Evelyn

+0

Ich habe vergessen, dass ich eine meiner alten Variablen drin gelassen habe, was keinen Sinn ergibt, wenn man nicht weiß, was die App macht. :) Es tut uns leid. Behoben. – Evelyn

Antwort

2

Arrays haben keine Schlüssel (sie benötigen keine, da ihre Elemente durch ihre Indizes adressiert werden), nur Wörterbücher bestehen aus Schlüssel/Wert-Paaren. Versuchen:

for (id value in originalArray) { 
      NSLog(@"bundle: value=%@", value); 
    } 
+0

Yay! Es funktionierte. – Evelyn

0

In Ihrer for Schleife, sind Sie originalArray wie ein Wörterbuch verwenden. Wenn die Wurzel Ihres Plist ein Wörterbuch ist, sollten Sie NSDictionary, nicht NSArray verwenden, um es zu lesen.

+0

Der Stamm ist ein NSArray. Wie lese ich es dann als NSArray? Ich muss Werte hinzufügen, und ich kann keine Werte mit einem NSDictionary hinzufügen. – Evelyn

+0

genau, wenn die Wurzel "Array" ist, dann können Sie entweder NSArray oder NSMutableArray verwenden. –

0

Sie können NSMutableArray sofort verwenden anstelle von NSArray und konvertieren zu NSMutableArray als auch sicher sein, dass Ihre pList Array-Typ ist. Ihr Code würde aussehen:

-(void)recordValues:(id)sender { 
// read "propertyList.plist" values 
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"propertyList" ofType:@"plist"]; 
//create an NSMutableArray containing the 
//user's score and the values from originalArray 
NSMutableArray *array = [NSArray arrayWithContentsOfFile: path]; 
[newArray addObjectsFromArray:array]; 
//check-out the content 
NSLog(@"The content of the array: %@", array); 
//write xml representation of mutableArray back to propertyList 
[array writeToFile:plistPath atomically:NO]; 
} 
} 
Verwandte Themen