После того, как я заблокировал объект с помощью NSKeyedUnarchiver, я могу использовать его, как обычно, но я не могу его повторно архивировать. Когда я пытаюсь, он падает.Что происходит с unarchived объектами?
[NSKeyedArchiver archiveRootObject:unarchivedObject toFile:fileName];
Я пытался смотреть в ресурсах для разработчиков в яблоке, но я не видел тщательный explination надлежащего использования NSKeyedArchiver. Пожалуйста помоги.
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000023
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Application Specific Information:
objc_msgSend() selector name: replacementObjectForKeyedArchiver:
iPhone Simulator 3.2 (193.8), iPhone OS 3.2 (iPad/7B367)
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 libobjc.A.dylib 0x958a0ed7 objc_msgSend + 23
1 OGLGame 0x0000c7e2 -[Sounds encodeWithCoder:] + 59 (Sounds.m:86)
2 Foundation 0x0280d25b _encodeObject + 827
3 Foundation 0x028243cc -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 284
4 Foundation 0x0281a367 -[NSArray(NSArray) encodeWithCoder:] + 615
5 Foundation 0x0280d25b _encodeObject + 827
6 OGLGame 0x0000ebc2 -[Row encodeWithCoder:] + 244 (Row.m:153)
7 Foundation 0x0280d25b _encodeObject + 827
8 Foundation 0x028243cc -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 284
9 Foundation 0x0281a367 -[NSArray(NSArray) encodeWithCoder:] + 615
10 Foundation 0x0280d25b _encodeObject + 827
11 Foundation 0x0285de10 +[NSKeyedArchiver archiveRootObject:toFile:] + 176
Насколько я могу судить, это может быть мой класс Sounds. Я проверю это, пока вы это проверите.
Хотя, после исследования я нашел это:
replacementObjectForKeyedArchiver:
переопределены подклассами, чтобы заменить другой объект для себя во время шпоночным архивирования.
- (идентификатор) replacementObjectForKeyedArchiver: (NSKeyedArchiver *) архиватор
Параметры архиватор шпоночным архиватор создания архива. Возвращаемое значение Объект кодируется вместо приемника (если он отличается).
Обсуждение Этот метод вызываются только тогда, когда нет отображения для замены объекта не было создано в кодере (например, из-за предыдущий вызов replacementObjectForKeyedArchiver: для этого объекта).
Вы должны опубликовать содержимое '- [Звуки encodeWithCoder:]'. Пожалуйста, попробуйте подумать, отправляя сообщения другим парням/женщинам здесь, чтобы понять ошибку. Будьте изобретательны! – Yuji
каждый объект соответствует протоколу 'NSCoding', который вы хотите архивировать? – holex