Проблема сохранения списка - PullRequest
1 голос
/ 23 декабря 2010

Я пытался использовать plist для хранения массива с кодом ниже:

NSString *name = firstName.text;
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Names" ofType:@"plist"];

    NSMutableArray *namesArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

    [namesArray addObject:name];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    [paths release];
    NSString *docDirPath = [documentsDirectory stringByAppendingPathComponent:@"Names.plist"];
    [namesArray writeToFile:docDirPath atomically:YES];

    namesArray = [[NSMutableArray alloc] initWithContentsOfFile:docDirPath];

Кажется, этот код работает. Используя NSLog, я обнаружил, что после выполнения этого кода plist содержит то, что я хочу, однако моя программа падает, поскольку генерирует EXC_BAD_ACCESS на устройстве, а на симуляторе - просто без объяснения причин. Кто-нибудь знает, почему это может произойти?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2010
 NSArray *paths = NSSearchPathForDirectoriesInDomains
(NSDocumentDirectory, NSUserDomainMask, YES); //Auto-released array

NSString *documentsDirectory = [paths objectAtIndex:0];

[paths release]; //Oh noes!

У вас нет ссылки на paths, поэтому не выпускайте ее.Удалите [paths release] и держу пари, что вы в порядке.Вы терпите крах, потому что пул автоматического выпуска освобождает пути после того, как вы уже сделали это самостоятельно.

Quoth руководство :

Вы только выпускаете или автоматически выпускаете свои собственные объекты.Вы вступаете во владение объектом, если создаете его с помощью метода, имя которого начинается с «alloc» или «new» или содержит «copy» ... или если вы отправляете ему сообщение сохранения.

0 голосов
/ 23 декабря 2010

Вы проверили, в каком месте выдает ошибку EXC_BAD_ACCESS.

В вашем коде есть две неправильные вещи;это.

Файл Plist состоит из словаря, а не массива. Здесь в коде вы копируете данные файла в массив.и сохранение массива в файл plist.

Во-вторых, вы освобождаете массив «paths» без завершения его использования.вы должны освободить этот массив в конце операторов;как после обновления массива в файл.

С уважением,

Сатья

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...