gpt4 book ai didi

objective-c - NSUserDefults 返回 null

转载 作者:行者123 更新时间:2023-11-29 04:34:07 24 4
gpt4 key购买 nike

我在 NSUserDefults 中保存了一个自定义对象,该对象有多个属性, 我初始化 AppDelegate 中自定义对象的值, 我的问题是,当我尝试在 viewcontroller didLoad 方法中检索自定义对象属性“userToken”时,它可以工作并且数据正确,但是当我在 View Controller 中的另一个方法中检索它时,我得到 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;
}

这是 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"];
}

最佳答案

试试这个:另请注意, + 意味着作为无法访问类属性的静态函数,使得 saveuser 或retrieveuser 函数中的所有内容也可以解码,而无需调用类外的另一个方法来解码它。这就是为什么当您在 loadview 之外使用 + 方法时,它可能总是获得 null 值

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

关于objective-c - NSUserDefults 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11280752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com