0

我创建了一个Master-Detail-Application,它使用一个DetailViewController和多个 TableViewDataSource。每次用户触摸一个项目时,我都会检查项目类并为其选择正确的 TableSource。像这样:

if ([_detailItem isKindOfClass: [cAdress class]]) {
    self.dataSource = [[AddressDetailTableSource alloc] init];
    ((AddressDetailTableSource *) dataSource).current = _detailItem;
} else if ([_detailItem isKindOfClass: [cActivities class]]) {
    self.dataSource = [[ActivityDetailTableSource alloc] init];
    ((ActivityDetailTableSource *) dataSource).current = _detailItem;
}...

有时我会更深入地了解细节,并DetailView在当前的DetailView. 我经常用一些不同的观点来做这件事。在 MasterView 中选择一个项目会导致应用程序返回到第一个 DetailView ( popToRootViewController)。我现在特别对一种观点有疑问。当此视图位于顶部并且我在 中选择一个项目时MasterView,我的应用程序崩溃。NSZombies我发现它仍然尝试使用错误的数据源构建表。或者至少它试图titleForHeaderInSection在错误的数据源上调用“”。错误信息是:

[ItemDetailTableSource tableView:titleForHeaderInSection:]:message sent to deallocated instance... 

错误只发生在这个特定的 TableSource 上,我也同样对待。

谁能帮我摆脱这个问题?

任何帮助表示赞赏!

4

1 回答 1

0

我认为您的应用程序正在尝试使用解除分配的实例访问数据源,您最好为每个 tableView 设置单独的类,这将简化您的工作,始终尝试对类进行模块化,而不是将所有内容都放在一个类中。

于 2013-07-09T08:49:45.077 回答