Как сохранить мой тип данных в 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). Пожалуйста, смотрите этот пост.