0

我有一个自定义 UIView,MyView,其中有几个 tableviews - tv1 和 tv2 - 都以编程方式添加。

我有一个自定义的 UIViewController,MyController,它在 loadView 上创建了一个 MyView 的实例。

我的目标如下。myView 应该是 myView.tv1 的数据源和委托,因为它不会触及我的数据模型并且是静态的。

myController 应该是 myView.tv2 的委托,因为它的内容将取决于数据源。

我在每个标题中添加了以下内容:

@interface MyController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@interface MyView : UIView <UITableViewDelegate, UITableViewDataSource>

并添加到每个所需的委托方法。

在 MyView 的初始化中,我添加了该表视图,并将第一个的委托设置为 self:

tv1 = [[UITableView alloc] initWithFrame:frame1 style:UITableViewStyleGrouped];
tv1.delegate = self;
tv1.datasource = self;

tv2 = [[UITableView alloc] initWithFrame:frame2 style:UITableViewStyleGrouped];

在我的控制器中,我连接了第二个 tableview:

- (void)loadView{
self.view = [[MyView alloc] initWithFrame:myFrame];
[(MyView *)self.view tv2].delegate = self;
[(MyView *)self.view tv2].dataSource = self;
}

当我运行它时,我得到了一大堆运行时错误。有时它抱怨分页控件,有时抱怨 NSCFArray,有时根本没有文本。它总是崩溃。

我已经确定是设置导致问题的数据源,而不是委托。如果我注释掉 laodView 中的数据源行,它运行良好(但当然没有内容)。

什么可能导致我每次都遇到不同的运行时错误,我可能在哪里出错?

4

1 回答 1

0

myView 应该是 myView.tv1 的数据源和委托,因为它不会触及我的数据模型并且是静态的

那不是真正的 MVC,对吧?

如果您为每个表准备单独的组合委托和数据源类,我认为您将能够更快地跟踪问题(或轻松避免它)。数据源table1可能是.MyView

保留由表所有者保留的委托/数据源引用至关重要,因为表本身不会保留它(这对于将委托/数据源设置self为 table1(MyView)和 table2 的情况可能不是那么重要( MyController),但如果您创建单独的委托和数据源类,则需要牢记这一点)。无论如何,您需要保留array您正在使用的数据源。

于 2012-05-28T22:26:31.480 回答