Я испытываю невероятно странный сбой внутри моего переопределения метода 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:
Надеюсь, что это поможет: http://stackoverflow.com/questions/3058338/what-happens-with-unarchived-objects – gagarwal
@gagarwal, что вопрос не содержит никаких полезных ответов. –