如何在NSUserDefault中存儲自定義對象好吧,所以我已經做了一些周旋,我意識到我的問題,但我不知道如何解決它。我做了一個自定義類來保存一些數據。我為這個類創建對象,并且需要它們在會話之間持續。在我把所有信息都放進去之前NSUserDefaults但這不管用。-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<Player: 0x3b0cc90>' of class 'Player'.當我將自定義類“Player”放入NSUserDefaults..顯然,我已經讀過了NSUserDefaults只存儲某些類型的信息。所以我如何讓我的對象NSUSerDefaults?我讀到應該有一種方法來“編碼”我的自定義對象,然后把它放進去,但是我不知道如何實現它,幫助是非常感謝的!謝謝!*編輯*好的,所以我使用了下面給出的代碼(謝謝!),但是我仍然有一些問題?;旧?,代碼現在崩潰了,我不知道為什么,因為它不會產生任何錯誤。也許我錯過了一些基本的東西,我只是太累了,但我們會看到。以下是我的自定義類“Player”的實現:@interface Player : NSObject {
NSString *name;
NSNumber *life;
//Log of player's life}//Getting functions, return the info- (NSString *)name;- (int)life;- (id)init;//These are the setters-
(void)setName:(NSString *)input; //string- (void)setLife:(NSNumber *)input; //number @end實施文件:#import "Player.h"@implementation Player- (id)init {
if (self = [super init]) {
[self setName:@"Player Name"];
[self setLife:[NSNumber numberWithInt:20]];
[self setPsnCounters:[NSNumber numberWithInt:0]];
}
return self;}- (NSString *)name {return name;}- (int)life {return [life intValue];}- (void)setName:(NSString *)input {
[input retain];
if (name != nil) {
[name release];
}
name = input;}- (void)setLife:(NSNumber *)input {
[input retain];
if (life != nil) {
[life release];
}
life = input;}/* This code has been added to support encoding and decoding my objecst */-(void)encodeWithCoder:(NSCoder *)encoder{
//Encode the properties of the object
[encoder encodeObject:self.name forKey:@"name"];
[encoder encodeObject:self.life forKey:@"life"];}-(id)initWithCoder:(NSCoder *)decoder{
self = [super init];
if ( self != nil )
{
//decode the properties
self.name = [decoder decodeObjectForKey:@"name"];
self.life = [decoder decodeObjectForKey:@"life"];
}抱歉這么多密碼。只是想幫忙?;旧希搼贸绦驅?,然后立即崩潰。我已經把它縮小到了應用程序的加密部分,那是它崩潰的地方,所以我做了一些錯誤的事情,但我不確定是什么。再次感謝您的幫助,謝謝!(我還沒來得及解密,因為我還沒有開始加密。)
3 回答

慕的地6264312
TA貢獻1817條經驗 獲得超6個贊
- (void)encodeWithCoder:(NSCoder *)encoder { //Encode properties, other class variables, etc [encoder encodeObject:self.question forKey:@"question"]; [encoder encodeObject:self.categoryName forKey:@"category"]; [encoder encodeObject:self.subCategoryName forKey:@"subcategory"];}- (id)initWithCoder:(NSCoder *)decoder { if((self = [super init])) { //decode properties, other class vars self.question = [decoder decodeObjectForKey:@"question"]; self.categoryName = [decoder decodeObjectForKey:@"category"]; self.subCategoryName = [decoder decodeObjectForKey:@"subcategory"]; } return self;}
NSUserDefaults
:
- (void)saveCustomObject:(MyObject *)object key:(NSString *)key { NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:encodedObject forKey:key]; [defaults synchronize];}- (MyObject *)loadCustomObjectWithKey:(NSString *)key { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *encodedObject = [defaults objectForKey:key]; MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject]; return object;}
- 3 回答
- 0 關注
- 753 瀏覽
添加回答
舉報
0/150
提交
取消