2012-07-01 56 views
0

我將自定義對象保存在NSUserDefults中,該對象具有多個屬性, 我初始化了AppDelegate中的自定義對象的值, 我的問題是當我嘗試檢索自定義對象屬性「userToken 「在視圖控制器didLoad方法它的工作原理和數據是正確的,但是當我在視圖控制器中的另一種方法檢索它我得到NULL請注意,其他屬性」uId「返回正確的值,我以同樣的方式檢索對象NSUserDefults返回null

我在這裏做錯了什麼?幫助是非常感謝

這裏就是我如何保存和檢索對象

+(void)SaveUser:(User *)user 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *userData = [NSKeyedArchiver archivedDataWithRootObject:user]; 
    [userDefaults setObject:userData forKey:@"User"]; 
    [userDefaults synchronize]; 
} 

+(User*)retrieveUser 
{ 
    NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; 
    NSData *userData = [ud objectForKey:@"User"]; 
    User *user = [NSKeyedUnarchiver unarchiveObjectWithData:userData]; 
    return user;  
} 

和這裏的用戶對象的執行

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super init]; 
    if (self) 
    {  
     //uId and userToken are of type NSString 
     self.uId = [decoder decodeObjectForKey:@"UID"]; 
     self.userToken = [decoder decodeObjectForKey:@"DeviceToken"]; 
    } 
    return self; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    [encoder encodeObject:self.uId forKey:@"UID"]; 
    [encoder encodeObject:self.userToken forKey:@"DeviceToken"]; 
} 

回答

1

試試這個: 另外請注意,+的意思是靜態函數無法訪問類屬性會使saveuser或retrieveuser函數中的所有內容都解碼,而無需調用另一種類外的方法來解碼它。這是爲什麼,也許當你使用它的loadView

+(void)SaveUser:(User *)user 
{ 
    NSUserDefaults *UserDefaults = [NSUserDefaults standardUserDefaults]; 
    [UserDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:user] forKey:@"User"]; 
    [UserDefaults synchronize]; 
} 

+(User*)retrieveUser 
{ 
    NSUserDefaults *UserDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *userData = [UserDefaults objectForKey:@"User"]; 
    User *user = [NSKeyedUnarchiver unarchiveObjectWithData:userData]; 
    return user; 
} 
+0

日Thnx但方法SaveUser的你+方法總是得到空值:和retrieveUser是一個實用工具類的一部分,因此+等,這些方法都沒有的一部分用戶類! – ahmad

+0

你使用initWithCoder和encodeWithCoder的方法,如果你試圖把它們放在工具類中,你總是得到null,因爲你不能訪問靜態類的屬性..所以如果你只使用這兩個函數-SaveUser retrieveUser - 從實用程序類,甚至應用程序委託它將工作,因爲他們爲我的任何內部或外部viewdidload調用工作.. –

+0

thnx與我在這裏baring,但這正是我在做的initWithCoder結束encodeWithCoder不在實用程序他們在User類中的類,是什麼讓我瘋狂,有時它有效,有時它只是返回null! – ahmad