2013-11-01 4 views
2

Я пытаюсь разблокировать массив объектов определенного типа, но функция initWithCoder: не выполняется в классе объекта. Вместо этого я дал ошибку:Функция initWithCoder: не вызывается из unarchiveObjectWithData:

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

Теперь, странное дело, то encodeWithCoder: называется и я могу записать данные на диск просто отлично. Затем, когда вы пытаетесь прочитать данные назад, данные выглядят точно так же, как и записанные на диск.

Запись на диск:

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

С командой ро в консоли, я могу подтвердить ArrayData выглядит вдоль линий:

<62706c69 73743030 ... 00000000 00000288> 

Чтение данных обратно:

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

данные для чтения:

<62706c69 73743030 ... 00000000 00000288> 

но приложение, похоже, аварийно завершает работу по unarchiveObjectWithData: строка с вышеприведенной ошибкой, но, похоже, даже не вызывает initWithCoder: на моем классе.

И довершение всего ... она отлично работает на прошивке 7

+0

Вы говорите, что это работает на iOS 7. Где это не работает? – rmaddy

+0

Кажется, что не работает на iOS 6. – Taz

ответ

1

мне удалось решить эту проблему путем переименования класса сущностей. Теперь весь существующий код работает так, как ожидалось.

Смежные вопросы