亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在NSUserDefault中存儲自定義對象

如何在NSUserDefault中存儲自定義對象

iOS
慕慕森 2019-06-04 17:30:12
如何在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個贊

在Player類中,實現以下兩個方法(用與您自己的對象相關的內容替換對encodeObject的調用):

- (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;}

無恥地從以下地方借來的代碼:在nsuserdefaults中保存類


查看完整回答
反對 回復 2019-06-04
  • 3 回答
  • 0 關注
  • 753 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號