EXC_BAD_ACCESS versucht, einen NSArray zu lesen
-
06-07-2019 - |
Frage
Im folgenden Code versuche ich, Daten aus einem Plist zu lesen:
-(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];
}
}
Wenn ich versuche, "SavedObject.Value1" festzulegen, bekomme ich einen Fehler "exc_bad_access".
Mir ist klar, dass dies sehr wahrscheinlich eine grundlegende Speicherverwaltung oder Zeiger-/Objekt -Art von Verwirrung ist, aber ich lerne immer noch. Ich hoffe, jemand kann mir hier helfen. Mit freundlichen Grüßen Sjakelien
Lösung
Sie haben nicht initialisiert savedObject
Zu der Zeit, als Sie die festlegen value1
Eigentum. Sie müssen hinzufügen:
savedObject = [[myCustomObject alloc] init];
vor deinem for
Schleife, damit es ein gültiges Objekt ist, auf das Sie Eigenschaften festlegen können.
Andere Tipps
Ich sehe nicht mutableArrayValueForKey
in NSUserDefaults
. Versuchen arrayForKey:
Stattdessen gibt das dir das NSArray*
.
Scheint, dass die Werte zurückgegeben werden defaults
sind unveränderlich (machen Sie Sinn, wenn Sie Sachen aus der Datei erhalten).
Überprüfen Sie den zurückgegebenen Wert von mutableArrayValueForKey
, Ich vermute, es ist Null.
Beim zweiten Blick macht Ihr Code nicht viel Sinn. Zu keinem Zeitpunkt zuordnen Sie SavedObjects zu, aber Sie stecken es wiederholt in ein Array ein. Selbst die Art und Weise, wie Sie die Werte extrahieren, scheint nicht korrekt zu sein.
Ich würde empfehlen, die Referenz von NsuserDefautls in Apple -Dokumentation zu betrachten, es gibt Beispiele für die grundlegende Verwendung.