2014-11-27 4 views
1

Я испытываю невероятно странный сбой внутри моего переопределения метода encodeWithCoder:. Вы можете увидеть мое внедрение в https://github.com/reidmain/FDModel/blob/193b0661f7ab1ce62f80de02bcbfa10a38c58ce9/FDModel/FDModel.m#L340-358Ошибка, возникающая внутри encodeWithCoder: on replacementObjectForKeyedArchiver: метод

Я получил десятки тысяч крешлогов похожее на следующее:

Exception Type: SIGSEGV 
Exception Codes: SEGV_ACCERR at 0x5000000c 
Crashed Thread: 0 

Application Specific Information: 
objc_msgSend() selector name: replacementObjectForKeyedArchiver: 

Thread 0 Crashed: 
0 libobjc.A.dylib      0x38acb626 objc_msgSend + 6 
1 Foundation       0x2eca70d7 _encodeObject + 128 
2 MyApp        0x00411d8b -[FDModel encodeWithCoder:] + 268 
3 Foundation       0x2eca7479 _encodeObject + 1058 
4 Foundation       0x2eca8657 -[NSKeyedArchiver _encodeArrayOfObjects:forKey:] + 396 
5 Foundation       0x2eca8329 -[NSDictionary(NSDictionary) encodeWithCoder:] + 918 
6 Foundation       0x2eca7479 _encodeObject + 1058 
7 Foundation       0x2ecf432d +[NSKeyedArchiver archiveRootObject:toFile:] + 202 
8 MyApp        0x003dd561 -[MyAppsDataClient _saveObjectsToDisk] + 74 

Проблема заключается в том, что внутри компании никто не испытал эти аварии лично. Даже после написания стресс-теста, который вызывает метод, который запускает кодирование каждые две секунды и позволяет ему работать в течение часа, ничего не происходит.

Похоже, что FDModel или объект, который он пытается кодировать, каким-то образом освобождаются из памяти, но как это происходит, для меня остается загадкой. Если FDModel был освобожден из памяти, как будет вызван _encodeObject? Если бы FDModel был выпущен из памяти, я бы ожидал увидеть широкий диапазон журналов сбоев при всех способах вызова FDModel, но он не существует в памяти. К сожалению, мы не участвуем в обслуживании ниоткуда. Все аварии кричат ​​о replacementObjectForKeyedArchiver:

+0

Надеюсь, что это поможет: http://stackoverflow.com/questions/3058338/what-happens-with-unarchived-objects – gagarwal

+0

@gagarwal, что вопрос не содержит никаких полезных ответов. –

ответ

1

После разговора с сотрудником Apple на dev forums похоже, что проблема была связана с тем, что модель была закодирована одновременно с изменением.

I updated FDModel использовать NSRecursiveLock всякий раз, когда производилась модификация модели или всякий раз, когда была закодирована модель.

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