2013-03-18 6 views
1

NSKeyArchiver를 사용하여 계정에 파일을 저장하지만로드하려고하면 내 계정이 initWithCoder를 구현하지 못한다는 오류가 발생합니다. NSCoding :NSKeyUnarchiver를 사용하여 데이터를로드 할 때 응용 프로그램이 작동하지 않습니다.

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

Account.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]; 
} 

또한 이미 작동했음을 언급해야하지만 1 초에서 다른 것까지는 더 이상 작동하지 않습니다. NSKeyedArchiver가 올바르게 저장되었는지 확인했습니다.

답변

1

문제는 이름 충돌 일 수 있습니다.

Apple의 Message.framework에는 Account이라는 클래스가 있습니다. 이 개인 프레임 워크를 직접 연결하지는 않지만 다른 Apple 프레임 워크 (예 : MessageUI.framework)에서 간접적으로로드 할 수 있습니다. 최근에이 프레임 워크를 프로젝트에 추가했다고 생각합니다. 버그가 처음 발생한 때입니다.

유일한 해결책은 Account 클래스의 이름을 바꾸는 것입니다. Apple 프레임 워크에 실제로 quite a lot of unprefixed classes이 있습니다. 따라서 should use a name prefix입니다.

@bbum here에서 제안한 버그를 신고해야합니다.

+0

네, 그렇게 생각합니다. 나는 프레임 워크를 추가했고 그 이후로는 더 이상 작동하지 않았다. – user1734282