특정 유형의 객체 배열을 보관 취소하려고 시도하지만 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 :를 호출하지 않은 것으로 보입니다.
그리고 모두를 위로하는 ... 그것은
iOS 7에서 작동한다고합니다. 어디에서 작동하지 않습니까? – rmaddy
iOS 6에서 작동하지 않는 것 같습니다. – Taz