objective-c - AnimationForKey 上的 EXC_BAD_ACCESS :

标签 objective-c cocoa exc-bad-access quartz-graphics cagradientlayer

我正在尝试使用 Scintilla 组件的最新功能,该功能提供类似 OSX 的文本突出显示效果(黄色动画弹跳框),但我遇到了一个错误:间歇性弹出:

EXC_BAD_ACCESS

指向该特定行:

if (layerFindIndicator!=nil)
        if ([layerFindIndicator animationForKey:@"animateFound"])
            [layerFindIndicator removeAnimationForKey:@"animateFound"];

(if是我的;以防万一我发现对象layerFindIndicator为零,或释放或其他什么......不幸的是,它没有帮助。 ..)

layerFindIndicator 似乎是 CAGradientLayer 的子类。 (您可能会看到layerFindIndicator的完整代码,here)。

既然我是Quartz Core的绝对新手,请给我任何关于如何调试它的提示吗?

最佳答案

Since, I'm an absolute newbie to Quartz Core, could please give me any hint as to HOW this could be debugged?

这与 QuartzCore 没有任何关系(至少,我希望没有)——它是一般的 this-object-has-been-killed-before-its-time-how-do-I-find-the - killer 级的东西。

在 Xcode 中:

  1. 编辑您当前的方案。
  2. 对于“配置文件”操作,将其设置为使用“调试”构建配置。
  3. 关闭它,然后点击“配置文件”命令。

Xcode 将针对该操作进行构建,然后启动 Instruments。

仪器会提示您选择模板;你想要僵尸模板。一旦您选择了它,Instruments 将创建一个跟踪文档并运行您的应用程序。切换到您的应用程序(如果它还不是最前面的),然后执行导致崩溃的任何操作。

如果崩溃确实是死亡对象崩溃,僵尸会揭露它。您将在 Instruments 的时间轴中看到一个标志,上面写着“消息发送到僵尸对象 0xd3c2b1a0”,您的程序可能会在不久之后退出。

在那个标志中有一个很小的按钮,看起来像这样:➲除了它是灰色的。单击它。

这将带您到该对象的历史记录(实际上是该地址的历史记录,包括任何以前的对象或从该地址开始的其他分配)。显示扩展详细信息 Pane (显示在右侧的显示堆栈跟踪的 Pane ),然后向下滚动到末尾,然后随着时间一步步向后(向上)移动,查看版本和自动释放,寻找不存在的版本不平衡对象的分配或保留。

解决方案可能涉及以下一项或多项:

  • 将属性更改为strongweak,而不是分配/unsafe_unretained
  • 添加一个您之前没有强烈拥有某个对象的属性
  • 如果不清楚您需要执行上述哪一项操作,或者其中一项看起来像是肮脏的黑客行为,则重新架构一些事情
  • 切换到 ARC 以获取 weak 属性和 __weak 实例变量(当引用的对象消亡时,这两个变量都会自动设置为 nil)并让局部变量隐式初始化为nil

但这取决于您在 Instruments 中找到的内容。当然,您的问题(访问不良)也有可能根本不是死对象,并且上述所有内容都不会帮助您。

关于objective-c - AnimationForKey 上的 EXC_BAD_ACCESS :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269133/

相关文章:

iphone - map 标准蓝色标记

iphone - 简单的 UITextView 崩溃

objective-c - Cocoa:向现有 GUI 应用程序添加命令行功能

objective-c - SMJobBless 和 NSXPCConnection

cocoa - 如何在 Cocoa for OSX 中通过 SQLite 以编程方式创建新数据库?

ios - swift_unknownRelease 崩溃 - SwiftHTTP

ios - NSDictionary EXC_BAD_ACCESS

java - 以编程方式在 AWS S3 上启用版本控制

iphone - IBOutlet 为零的问题

objective-c - cocoa TreeView