gpt4 book ai didi

ios - 发送到已释放实例错误的消息

转载 作者:行者123 更新时间:2023-12-01 16:15:54 26 4
gpt4 key购买 nike

我经常收到一个错误,显示为 *** -[NSKeyValueObservance retain]: message sent to deallocated instance 0x86c75f10 .我试过运行 Zombies 模板,这里是它提供的截图。

enter image description here

它指向一个托管对象,我无法确定对象被释放的位置。这是每次崩溃后编译器带我去的代码块。

- (void)setIsFavourite:(BOOL)isFavourite shouldPostToAnalytics:(BOOL)shouldPostToAnalytics;
{
// check whether we need to generate preferences objects just in time
if(!self.preferences && !self.series.preferences /*&& isFavourite*/)
{
if(self.series)
{
[self.series addPreferencesObject];
}
else
{
[self addPreferencesObject];
}
}

//Crash In here
self.preferences.isFavourite = @(isFavourite);
self.series.preferences.isFavourite = @(isFavourite);

编辑:如果您需要查看更大尺寸的图像 here是一个更大的分辨率链接。

最佳答案

好的,我遇到了类似的问题,并找到了一种使用 NSKeyValueObservance 调试此类问题的方法。要调试,请执行以下操作:

  • 在 Xcode 中,打开“断点导航器”。
  • 添加一个新的符号断点:-[NSKeyValueObservance _initWithObserver:property:options:context:originalObservable:]
  • 在该断点上,添加一个操作并将其设置为“调试器命令”。
  • 设置以下命令:expr (void)NSLog(@"observer <0x%p>: %@ <%p>, property: %@", $arg1, (id)NSStringFromClass((id)[(id)$arg3 class]), $arg3, (id)$arg4)
  • 单击“评估表达式后自动继续”。

  • 现在您可以运行您的应用程序并采取必要的步骤来重现您的崩溃。是的,您需要启用 NSZombies。注意:它会运行得很慢,你会得到大量的调试输出,但请耐心等待。它最终会到达那里。

    当您尝试向已释放的 NSKeyValueObservance 发送消息时遇到崩溃时,您将看到原始对象的地址。突出显示地址并按 cmd-e 在搜索缓冲区中输入文本。然后点击 cmd-g 在调试器输出中查找字符串的下一个匹配项。您可能会多次找到该地址,因此请查找 observer <0x?????> 后面的地址。输出。该行的输出应该告诉您正在观察哪个对象以及哪个属性。

    就我而言,当我弄清楚这一切时,结果发现我正在观察一个依赖于数组中对象的合成属性,并且在某个操作期间,数组中对象的顺序发生了变化,而没有执行正确的 KVO 通知,这导致了我的崩溃。

    关于ios - 发送到已释放实例错误的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28443712/

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