gpt4 book ai didi

objective-c - NSKeyedUnarchiver 不调用 initWithCoder

转载 作者:行者123 更新时间:2023-12-03 16:55:58 25 4
gpt4 key购买 nike

我使用了以下示例:

game state singleton cocos2d, initWithEncoder always returns null

我不使用文件,而是使用从 NSUserDefaults 获取的 NSData 对象。它不是 null,而是包含我认为是正确编码的数据的数据,并且由于某种原因,当我运行 unarchiveObjectWithData 时,它不会调用 initWithCoder,因为我将 NSLog 放在第一行。

想法?

+ (void)loadState {
@synchronized([AppStateManager class]) {
if (!sharedAppStateManager) {
[AppStateManager sharedManager];
}

NSUserDefaults *udefs = [NSUserDefaults standardUserDefaults];
NSData *archivedData = [udefs objectForKey:@"AppState"];
NSLog(@"going to unarchive");
[NSKeyedUnarchiver unarchiveObjectWithData:archivedData];
NSLog(@"unarchive complete");
}
}

- (id)initWithCoder:(NSCoder *)decoder {
NSLog(@"init coder");
self = [super init];
if (self != nil) {
[self setUsername:[decoder decodeObjectWithKey:@"username"]];
}

return self;
}

最佳答案

已解决。

上面链接中发布的示例使用 allocWithZone 方法通过“sharedInstance”初始化对象。如果该对象存在,则返回 nil。

NSKeyedUnarchiver 尝试通过 allocWithZone 再次分配,并且由于该对象已经在同一方法中早些时候初始化过,或者有时在之前,unarchiver 得到一个 nil 而不是分配的对象。

希望这对某人有帮助。

关于objective-c - NSKeyedUnarchiver 不调用 initWithCoder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3431279/

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