как правильно сохранить данные, прочитанные из plist? - PullRequest
0 голосов
/ 30 августа 2011

Я застрял в отладке NSInvalidArgumentException.Мое последнее подозрение состоит в том, что я не сохранил данные, прочитанные из plist должным образом, чтобы они были заняты каким-то другим объектом, пока я к нему обращаюсь.

Моя структура plist очень сложная, она имеет 8 уровней массивов / словарей,Я думаю, что потерял память при попытке получить доступ к объекту самого низкого уровня.

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

Вот как я прочитал:

NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];
NSError *error = [[[NSError alloc] init] autorelease];
NSArray *temp = (NSArray *)[[NSPropertyListSerialization
                            propertyListWithData:plistXML 
                            options:NSPropertyListMutableContainersAndLeaves
                            format:nil 
                            error:&error] retain];
self.dataPackage = [temp objectAtIndex:0];

dataPackage объявлен как:

@interface rootViewController:UIViewController{
  NSDictionary *dataPackage;
}
@property (retain) NSDictionary *dataPackage;

и синтезирован:

@synthesize dataPackage;

Яправильно делаешь?

Спасибо

Лев

Ответы [ 2 ]

2 голосов
/ 30 августа 2011

Я заметил 3 вещи:

  • Вам не нужно создавать объект NSError!NSPropertyListSerialization вернет объект ошибки в случае сбоя.Просто инициализируйте с помощью: NSError *error = nil;

  • Вам не нужно сохранять (автоматический выпуск) временный массив, вам явно не нужен весь массив после выборки объекта с индексом 0.

  • [temp objectAtIndex:0] произойдет сбой, когда массив пуст!

Обязательно освободите свойство var в dealloc с self.dataPackage = nil.Тогда все безопасно с точки зрения управления памятью.

0 голосов
/ 30 августа 2011

Пожалуйста, просмотрите структуру Plist в TextEdit .... Для более подробного ознакомления с моим предыдущим постом Если вы используете Xcode 4, то это может быть причиной.Структура может быть изменена в xcode 4.

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