1

我在 xcode 上遇到了一些奇怪的行为。我没有得到确切的错误,但代码执行停止在bkpt #207不提供堆栈跟踪。

在我的程序中,每当切换标签时,我都会弹出ToRootViewController。上述行为发生在我以编程方式从 MyViewController(堆栈中的第 3 个)弹出然后再次单击选项卡之后。我可以确认 MyViewController 被正确弹出。

使用 NSZombiesEnabled,我得到以下输出:

*** -[MyViewController tableView:titleForHeaderInSection:]: message sent to deallocated instance 0x6a4a00

我的预感是 MyViewController 的一些残余仍然链接到该选项卡栏。我正在使用 [self.tabBarController setSelectedIndex:kOtherTab] 以编程方式切换选项卡。

任何指针将不胜感激。

4

2 回答 2

4

我在 bkpt #207 停止调用 NSTimer:

[Timer invalidate];
[Timer release];

正确只是打电话

[Timer invalidate];

并且在 bkpt #207 的停止消失了。

  • 无效包括发布。
  • 人们会期望获得一个 SIGABRT 或 EXC_BAD_ACCESS 错误,以便将释放发送到一个不存在的对象。
于 2012-11-08T21:21:33.487 回答
1

看起来由于某种原因,在委托被解除分配后,tableview 正在调用它的委托(MyViewController)。

最好的办法是让 MyViewController 在释放时将 tableView 的委托设置为 nil。

于 2012-08-22T23:35:44.673 回答