1

我使用 NSKeyArchiver 将 Accounts 保存到一个文件中,但是当我尝试加载它们时,我的应用程序只是崩溃了,说 Account 没有实现 initWithCoder: 即使它实现了并且它也符合 NSCoding:

-[Account initWithCoder:]: unrecognized selector sent to instance 0xa947a00

帐户.m

 - (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super init];
if (self) {
    _name = [aDecoder decodeObjectForKey:@"name"];
    _accessToken = [aDecoder decodeObjectForKey:@"accessToken"];
    _refreshToken = [aDecoder decodeObjectForKey:@"refreshToken"];
    _selected = [aDecoder decodeBoolForKey:@"selected"];
    lastUpdate = [aDecoder decodeObjectForKey:@"lastUpdate"];
}
return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:_name forKey:@"name"];
[aCoder encodeObject:_accessToken forKey:@"accessToken"];
[aCoder encodeObject:_refreshToken forKey:@"refreshToken"];
[aCoder encodeBool:_selected forKey:@"selected"];
[aCoder encodeObject:lastUpdate forKey:@"lastUpdate"];
}

AccountStore.m 我在这里加载它们:

NSString *path = [[self archivePath] stringByAppendingPathComponent:@"accounts.archive"];
accounts = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
if (!accounts) {
    accounts = [[NSMutableArray alloc] init];
}

另外我应该提到它已经起作用了,但是从一秒钟到另一秒钟它就不再起作用了。我检查了 NSKeyedArchiver 是否正确保存:确实如此。

4

1 回答 1

1

问题可能是名称冲突。

Apple 的 Message.framework 包含一个名为Account. 虽然您永远不会直接链接此私有框架,但它可以从其他 Apple 框架间接加载,例如 MessageUI.framework。我可以想象您最近将此框架添加到您的项目中。这将是您的错误首次出现的时间。

唯一的解决方案是重命名您的Account课程。实际上,Apple 的框架中有很多不带前缀的类,所以无论如何你都应该使用名称前缀。

您应该按照@bbum here的建议提交一个错误。

于 2013-03-18T16:41:26.577 回答