0

我在 NSUserDefults 中保存了一个自定义对象,该对象具有多个属性,我在 AppDelegate 中初始化了自定义对象的值,我的问题是,当我尝试在 viewcontroller didLoad 方法中检索自定义对象属性“userToken”时它可以工作并且数据是正确的,但是当我在视图控制器中的另一个方法中检索它时,我得到 NULL 请注意,另一个属性“uId”返回正确的值,并且我正在以相同的方式检索对象

我在这里做错了什么?非常感谢您的帮助

这是我保存和检索对象的方式

+(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"];
}
4

1 回答 1

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;
}
于 2012-07-01T09:22:28.287 回答