我有一个NSOperation不在主线程中运行。它是从UITableViewController派生的。当操作完成后,我想重新加载tableview,因为有些数据已经改变。我已经为背景设置了一个委托来完成通知。完成后,我使用performSelectorOnMainThread专门在主线程上调用reloadData的包装器。NSOperation在后台完成,试图通知主线程,视图不再存在。崩溃
大部分情况下,这个效果很好,但是,原始(编辑)tableViewController(/编辑)获得释放并获得僵尸呼叫的机会非0。
所以,问题是两个部分:
- 是否有可能有从后台线程的委托,不保留的对象?
- 这只是一个糟糕的设计?我应该使用NSNotifications吗?这是否是在这种情况下通知的首选方法?
在此先感谢。
真正的问题是:为什么你的表格视图被释放?我有一种感觉,表视图没有妥善保留,这是你的根本问题。 – 2011-05-19 04:10:43
John是对的,如果你需要重新加载它,你不应该释放tableView。 reloadData方法将重置tableView,这就是你想要的。如果你想隐藏它或只是使用tableView.hidden属性。 – 2011-05-19 05:35:10
更正后,如果从导航控制器堆栈弹出,则可以释放tableViewController。数据仍然可能是相关的,但我希望线程完成(并保存它正在处理的数据) – 2011-05-19 18:24:43