EXC_BAD_ACCESS nel tentativo di leggere un NSArray
-
06-07-2019 - |
Domanda
Nel seguente codice, provo a leggere i dati da un plist:
-(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];
}
}
In qualche modo, quando provo a impostare " savedObject.value1 " ;, ottengo un " EXC_BAD_ACCESS " di errore.
Mi rendo conto che è molto probabile una gestione della memoria di base, o un tipo di confusione puntatore / oggetto, ma sto ancora imparando. Spero che qualcuno mi possa aiutare qui. I migliori saluti Sjakelien
Soluzione
Non hai inizializzato savedObject
al momento dell'impostazione della proprietà value1
. Dovrai aggiungere:
savedObject = [[myCustomObject alloc] init];
prima del tuo ciclo per
affinché sia ??un oggetto valido su cui puoi impostare le proprietà.
Altri suggerimenti
Non vedo mutableArrayValueForKey
in NSUserDefaults
.
Prova invece arrayForKey:
, che ti darà NSArray *
.
Sembra che i valori restituiti da valori predefiniti
siano immutabili (ha senso quando ricevi cose dal file).
Controlla il valore restituito da mutableArrayValueForKey
, sospetto che sia nullo.
Al secondo sguardo il tuo codice non ha molto senso. In nessun momento si allocano gli oggetti salvati ma lo si inserisce ripetutamente nell'array. Anche il modo in cui stai estraendo i valori non sembra corretto.
Suggerirei di consultare il riferimento NSUserDefautls nella documentazione di Apple, che contiene esempi di utilizzo di base.