Как сохранить мой тип данных в NSUserDefault?

Я хочу сохранить мой тип данных временно в NSUserDefault. эти данные позже отступят.

Я пытался следующий код.

MyObject *myObject = [[MyObject alloc] init];

[[NSUserDefaults standardUserDefaults] setObject:myObject forKey:@"kMyObject"];

но консоль покажи мне следующее сообщение.

-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<MyObject: 0x4aadb0>' of class 'MyObject'.  Note that dictionaries and arrays in property lists must also contain only property values.

Я могу игнорировать эти сообщения и принудительно вытащить из NSUserDefault.

MyObject *getObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"kMyObject"]; 

но не возвращать исходные данные. (Я проверил NSLog, возвращает ноль.)

Как решить эту проблему? Я предпочитаю только сохранить NSUserDefaults. не рекомендуется мне использовать CoreData.

2 ответа

Решение

Многие разработчики рекомендуют NSKeyedArchiver воспользоваться этой концепцией. но он должен реализовывать протоколы для NSCopy NSCoding и потому что некоторые из них могут быть сложными. Более того, есть более простой способ. обратитесь к следующему коду.

Сохранить

    MyObject *myObject = [[MyObject alloc] init];

    NSData *myObjectData  = [NSData dataWithBytes:(void *)&myObject length:sizeof(myObject)];

    [[NSUserDefaults standardUserDefaults] setObject:myObjectData forKey:@"kMyObjectData"];

нагрузка

    NSData *getData = [[NSData alloc] initWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"kMyObjectData"]];

    MyObject *getObject;

    [getData getBytes:&getObject];

Вы должны убедиться, что все объекты, содержащиеся в вашем экземпляре MyObject, являются объектами списка свойств (plist). Пожалуйста, смотрите этот пост.

Другие вопросы по тегам