gpt4 book ai didi

ios - NSUserDefaults 同步崩溃

转载 作者:行者123 更新时间:2023-11-29 13:00:07 24 4
gpt4 key购买 nike

调用后我的 ios 应用程序立即遇到 SIGSEGV 崩溃:

[[NSUserDefaults standardUserDefaults] synchronize];

这是同步命令之后的崩溃堆栈跟踪部分:

CoreFoundation 0x31920232 CFCopyTypeIDDescription + 29
CoreFoundation 0x3191cd41 <redacted> + 204
CoreFoundation 0x31910815 <redacted> + 16
CoreFoundation 0x3188e1ac <redacted> + 140
CoreFoundation 0x3189d1ff CFDictionaryApplyFunction + 158
CoreFoundation 0x3191c483 <redacted> + 282
CoreFoundation 0x318b237f CFPropertyListWriteToStream + 138
CoreFoundation 0x318b115d <redacted> + 296
CoreFoundation 0x318b1031 <redacted> + 132
CoreFoundation 0x318b03c1 <redacted> + 492
CoreFoundation 0x318b01d1 <redacted> + 20
CoreFoundation 0x318bb3ff <redacted> + 110
CoreFoundation 0x318bb8fb <redacted> + 74
CoreFoundation 0x3193cb3b <redacted> + 30
CoreFoundation 0x3193d509 <redacted> + 32
libdispatch.dylib 0x39bd54b7 <redacted> + 22
libdispatch.dylib 0x39bd99f7 <redacted> + 30
CoreFoundation 0x318c7045 CFPreferencesAppSynchronize + 312

这是一次罕见的崩溃,所以我无法重现,我的问题是:

什么会导致这样的崩溃?

最佳答案

为了避免这种情况并更好地控制默认设置,我所做的是通过我的 appDelegate 汇集所有内容(单例类也可以)。这个想法是,当你想保存一些东西时,你将它发送到指定的对象,在我的例子中:

[appDelegate defaultsSetObject:(id)obj forKey:(NSSString *)key];

在该方法中,我复制 obj 和键(以防它们是可变对象)。如果我遇到像你现在这样的麻烦,我可以在每次调用时调用同步(强制立即失败),或者至少记录所有内容。

如果您的问题难以重现,花时间重新组织您的默认代码可能是值得的。另一方面,您可以创建一个宏,用宏替换所有默认代码,然后通过重新定义宏获得与我所做的类似的行为。 [宏会是这样的:

SAVE_OBJECT_FOR_KEY(obj, key);

在最简单的命令情况下,只需保存对象即可。调试的时候,按照我上面的建议做复制,保存,然后同步。

关于ios - NSUserDefaults 同步崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19979561/

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