Приложение вылетает при работе с данными из nsuserdefaults - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть класс "MainClass". Этот класс реализует протокол NSCoding. В этом классе у меня есть массив с объектами другого класса «Объект», который также реализует протокол NSCoding. Когда я архивирую объект "MainClass" в NSUserDefaults, а затем разархивирую его и пытаюсь получить объект класса "Object" из массива и использовать его свойства, тогда я получаю сообщение:

[Свойство NSConcreteMutableData]: нераспознанный селектор отправлен в экземпляр.

Что я делаю не так? Как это исправить?

Edit: Это код, который я использую с NSUserDefaults:

- (Settings *) readData
{
     NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
     NSData *dataRepresentingSettings = [currentDefaults objectForKey:@"data"];

     if (dataRepresentingSettings != nil) {
             return (MainClass *)[NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSettings];
     }

     return nil;
}

- (void) saveData
{
     [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self] forKey:@"data"];
     [[NSUserDefaults standardUserDefaults] synchronize];
}

1 Ответ

1 голос
/ 13 сентября 2011

Есть два варианта:

(1) Вы не сохраняете объект, который вы получили от пользователя по умолчанию.Когда вы получаете объект из NSUserDefaults, он автоматически освобождается - если вы хотите сохранить его, вы должны retain.

(2) Вы забыли разархивировать его.Вы использовали NSKeyedArchiver для архивации вашего объекта, но не разархивировали его:)

вы могли бы сделать что-то вроде

Object *object = [defaults objectForKey:@"object"];

вместо

NSData *data = [defaults objectForKey:@"object"];
Object *object = [NSKeyedUnarchiver unarchiveObjectWithData:data];

NBНе забывайте, что object в моем примере все еще автоматически выпущен;если ты хочешь сохранить это, ты должен сохранить это;)

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