EXC_BAD_ACCESS tentar ler um NSArray
-
06-07-2019 - |
Pergunta
No código a seguir, tento ler dados de um arquivo 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];
}
}
De alguma forma, quando eu tentar definir "savedObject.valor1", eu recebo um erro "EXC_BAD_ACCESS".
Eu percebo isso, é bastante provável básicos, gerenciamento de memória, ou o ponteiro de objeto/tipo de confusão, mas eu ainda estou aprendendo.Espero que alguém possa me ajudar aqui.Melhores cumprimentos Sjakelien
Solução
Você não inicializou savedObject
no momento em que você define o value1
propriedade. Você precisará adicionar:
savedObject = [[myCustomObject alloc] init];
antes do seu for
Loop para que seja um objeto válido em que você possa definir propriedades.
Outras dicas
Eu não vejo mutableArrayValueForKey
no NSUserDefaults
.Tente arrayForKey:
em vez disso, o que vai dar NSArray*
.
Parece que os valores retornados de defaults
são imutáveis (faz sentido porque você está recebendo material de arquivo).
Verifique o valor devolvido de mutableArrayValueForKey
, Eu suspeito que é nil.
No segundo olhar o seu código não faz muito sentido.Em nenhum momento você alocar savedObjects mas você inserir repetidamente em matriz.Até mesmo a maneira que você está extraindo os valores não parecem corretas.
Gostaria de sugerir olhando NSUserDefautls referência a documentação da Apple, tem exemplos de uso básico.