カスタム オブジェクトを NSUserDefults に保存します。オブジェクトには複数のプロパティがあります。AppDelegate でカスタム オブジェクトの値を初期化します。私の問題は、viewcontroller didLoad メソッドでカスタム オブジェクト プロパティ「userToken」を取得しようとすると、機能することです。データは正しいですが、ビューコントローラーの別のメソッドでデータを取得すると、他のプロパティ「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"];
}