EXC_BAD_ACCESS пытается прочитать NSArray - PullRequest
2 голосов
/ 21 июня 2009

В следующем коде я пытаюсь прочитать данные из 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];
        }

    }

Каким-то образом, когда я пытаюсь установить «сохраненный объект.value1», я получаю ошибку «EXC_BAD_ACCESS».

Я понимаю, что это довольно вероятное базовое управление памятью, или путаница указателя / объекта, но я все еще учусь. Я надеюсь, что кто-то может помочь мне здесь. С наилучшими пожеланиями Sjakelien

Ответы [ 2 ]

5 голосов
/ 21 июня 2009

Вы не инициализировали savedObject во время установки свойства value1. Вам нужно будет добавить:

savedObject = [[myCustomObject alloc] init];

перед циклом for, чтобы он был действительным объектом, для которого можно установить свойства.

0 голосов
/ 21 июня 2009

Я не вижу mutableArrayValueForKey в NSUserDefaults. Попробуйте вместо этого arrayForKey:, это даст вам NSArray*.

Кажется, что значения, возвращаемые из defaults, являются неизменяемыми (имеет смысл, когда вы получаете данные из файла).

Проверьте возвращаемое значение из mutableArrayValueForKey, я подозреваю, что это ноль.

При втором взгляде ваш код не имеет особого смысла. Ни в коем случае вы не выделяете сохраненные объекты, но вы постоянно вставляете их в массив. Даже то, как вы извлекаете значения, кажется неправильным.

Я бы посоветовал взглянуть на ссылку NSUserDefautls в документации Apple, там приведены примеры базового использования.

...