2

My Data Type を一時的に 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 をチェックしました。Null を返します。)

この問題を解決するには?私は NSUserDefaults に保存することだけを好みます。CoreData を使用することはお勧めしません。

4

2 に答える 2

1

多くの開発者は、この概念を利用して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];
于 2012-08-03T04:40:04.183 に答える