2

Im folgenden Code zu lesen versuchen, ich versuche, Daten aus einer plist zu lesen:EXC_BAD_ACCESS ein NSArray

-(void)readPreferences 
    { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     NSMutableArray * myAppDefaults = [defaults mutableArrayValueForKey:@"LastList"]; 
     myCustomObject * savedObject; 
     NSUInteger i; 
     for (i = 0; i < [myAppDefaults count]; i++) 
     { 
      NSArray * thisArray = [myAppDefaults objectAtIndex:i]; 

      savedObject.value1 = [thisArray objectAtIndex:0]; 
      savedObject.value2 = [thisArray objectAtIndex:1]; 
      savedObject.value3 = [thisArray objectAtIndex:2]; 
      savedObject.value4 = [myAppDefaults objectAtIndex:3]; 

      [objectsArray addObject:savedObject]; 
     } 

    } 

Irgendwie, wenn ich versuche „savedObject.value1“ zu setzen, erhalte ich ein „EXC_BAD_ACCESS“ Fehler .

Ich realisiere, das ist ziemlich wahrscheinlich grundlegende Speicherverwaltung, oder Zeiger/Objekt Art von Verwirrung, aber ich lerne immer noch. Ich hoffe, dass mir jemand hier helfen kann. Mit freundlichen Grüßen Sjakelien

Antwort

5

Sie haben savedObject nicht zum Zeitpunkt der Einstellung der value1 Eigenschaft initialisiert. Sie hinzufügen müssen:

savedObject = [[myCustomObject alloc] init]; 

vor Ihrer for Schleife, damit es ein gültiges Objekt sein, dass Sie Eigenschaften auf einstellen.

+0

Sie sind so richtig! Danke vielmals! – Sjakelien

+2

Vergessen Sie nicht, die Freigabe oder Autorelease an dieses Objekt zu senden. –

0

Ich sehe mutableArrayValueForKey in NSUserDefaults nicht. Versuchen Sie stattdessen arrayForKey:, damit erhalten Sie NSArray*.

Scheint, dass die von defaults zurückgegebenen Werte unveränderlich sind (sinnvoll, da Sie Dateien aus der Datei erhalten).

Überprüfen Sie den zurückgegebenen Wert von mutableArrayValueForKey, ich vermute, es ist Null.

Auf den zweiten Blick macht Ihr Code nicht viel Sinn. Zu keinem Zeitpunkt weisen Sie savedObjects zu, aber Sie fügen es wiederholt in das Array ein. Selbst die Art, wie Sie die Werte extrahieren, scheint nicht korrekt zu sein.

Ich würde vorschlagen, NSUserDefautls Verweis in Apple-Dokumentation zu suchen, hat es Beispiele für die grundlegende Verwendung.

+0

Gemäß der Dokumentation ist mutableArrayValueForKey "Verfügbar in iPhone OS 2.0 und höher". Wie auch immer, der zurückgegebene Wert ist nicht NIL. Es enthält 12 Objekte. Ich denke, das ist das Problem. savedObject.value1 ist ein NSString, während der objectAtIndex: 0 ein Objekt ist. Vielleicht sollte ich es irgendwie konvertieren? – Sjakelien

+0

Alle NSStrings (dh NSString-Objekte) sind Objekte. –

+0

Sie haben Recht mit dem Nicht-Machen-Sinn meines Codes. Zum Glück bin ich rechtzeitig hierher zurückgekehrt, um mich davon abzuhalten, eine weitere dumme Frage zu stellen. Vielen Dank! – Sjakelien

Verwandte Themen