【问题标题】:App crashed, message sent to deallocated instance应用程序崩溃,消息发送到解除分配的实例
【发布时间】:2015-05-13 00:40:06
【问题描述】:

我收到以下错误, -[CALayer isKindOfClass:]: 消息发送到已释放的实例,虽然我使用的是 ARC

发生了什么,

  • 视图控制器 A 有一个表格视图和搜索字段。
  • 视图控制器 B 有一个 UIView 类型的子视图,其中该子视图包含 UITextView。

当我导航到视图控制器 B 并导航回视图控制器 A 时,如果我在搜索字段上单击选项卡,应用程序将崩溃并给我上述错误。

我做了很多调试,发现释放的实例是 View Controller B 中的 UITextView。

如果你能帮助我,为什么会这样。

非常感谢。

【问题讨论】:

  • 发布你的两个控制器的代码
  • 据我了解。您的导航流程是 ViewA->ViewB,当您返回 ViewA
  • 在ViewA,viewWillAppear,写yourTF.text = @"";

标签: ios objective-c iphone ipad memory-management


【解决方案1】:

没有代码很难猜出你做错了什么。例如,您可能正在从ViewController A 访问UITextView

无论如何,您都可以考虑使用NSZombie 来跟踪错误。您可以在“诊断 > 内存管理”下的 Xcode 编辑方案菜单中启用它。有关如何分析 NSZombies 的说明,请参阅此 StackOverflow post

【讨论】:

  • 谢谢@Dennis,我当然尝试过 Zombie,但它对我不起作用,当我运行 Zombie 时,当我到达 VC B 时,由于某种原因我无法导航回 VC A . 我知道没有代码很难,但是 VC B 与许多子视图类相关联,这使得它更难
  • @DILi,谢谢。你说的确实有道理,但我无法弄清楚问题所在。究竟发生了什么;当 VC B 加载它时实例化几个 UIViews 这些视图是独立的类并且每个都有 XIB,然后我将实例化的视图添加到一个数组中,这样用户就可以来回导航,UITextView 在这些视图之一中
  • 问题是当您离开视图时,UITextView 将被 iOS 释放。我建议您将UITextView 的文本存储在一个数组中,而不是视图本身。
猜你喜欢
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2013-06-04
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多