2013-11-01 5 views
2

특정 유형의 객체 배열을 보관 취소하려고 시도하지만 initWithCoder : 함수가 객체 클래스 내에서 실행되지 않습니다. 대신에, 나는 오류를 제공하고 있습니다 :initWithCoder : 함수가 unarchiveObjectWithData에서 호출되지 않았습니다.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SavedObject initWithCoder:]: unrecognized selector sent to instance 0x9e85f34' 

이제 이상한 일이되면, encodeWithCoder : 전화를 내가 잘 디스크에 데이터를 기록 할 수 있어요된다. 그런 다음 데이터를 다시 읽으려고 할 때 데이터는 디스크에 쓰여진 데이터와 정확히 같습니다.

디스크에 쓰기 :

<62706c69 73743030 ... 00000000 00000288> 

데이터를 다시 읽기 :

// arrayOfObjectsToSave 
NSData *arrayData = [NSKeyedArchiver archivedDataWithRootObject:arrayOfObjectsToSave]; 
// uses NSData writeToURL - Works fine! 
[self writeToDisk:arrayData]; 

를 콘솔에 포 명령으로, 나는 arrayData가의 라인을 따라 뭔가를 보이는 확인할 수 있습니다

// url passed through 
NSData *readBack = [self readDataFromURL:dataURL]; 
NSArray *persisitedArray = [NSKeyedUnarchiver unarchiveObjectWithData:readBack] 

리드 백 데이터는 다음과 같습니다.

<62706c69 73743030 ... 00000000 00000288> 

하지만 위의 오류와 함께 unarchiveObjectWithData : 행에서 응용 프로그램이 충돌하지만 내 클래스의 initWithCoder :를 호출하지 않은 것으로 보입니다.

그리고 모두를 위로하는 ... 그것은

+0

iOS 7에서 작동한다고합니다. 어디에서 작동하지 않습니까? – rmaddy

+0

iOS 6에서 작동하지 않는 것 같습니다. – Taz

답변

1

아이폰 OS 7에서 잘 작동 나는 클래스 개체의 이름을 변경하여 문제를 해결하기 위해 관리했다. 모든 기존 코드가 예상대로 작동합니다.

관련 문제