gpt4 book ai didi

ios - encodeWithCoder 内部发生崩溃 : on replacementObjectForKeyedArchiver: method

转载 作者:行者123 更新时间:2023-11-29 12:32:49 24 4
gpt4 key购买 nike

我在重写 encodeWithCoder: 方法时遇到了一个非常奇怪的崩溃。你可以在 https://github.com/reidmain/FDModel/blob/193b0661f7ab1ce62f80de02bcbfa10a38c58ce9/FDModel/FDModel.m#L340-358 看到我的实现

我已经收到了数以万计的类似如下的崩溃日志:

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:

最佳答案

dev forums 上与 Apple 员工交谈后看起来问题是由于模型在修改的同时被编码。

updated每当对模型进行更改或对模型进行编码时,FDModel 都会使用 NSRecursiveLock。

关于ios - encodeWithCoder 内部发生崩溃 : on replacementObjectForKeyedArchiver: method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27179896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com