ViewController作为自定义视图的tableview的委托

时间:2012-05-28 22:09:05

标签: ios model-view-controller uitableview uiview uiviewcontroller

我有一个自定义的UIView,MyView,里面有几个表格视图 - tv1和tv2 - 都是以编程方式添加的。

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

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

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

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

@interface MyController : UIViewController <UITableViewDelegate, UITableViewDataSource>

@interface MyView : UIView <UITableViewDelegate, UITableViewDataSource>

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

在MyView的init中,我添加了表视图,并将第一个的委托设置为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中注释掉数据源行,它运行正常(但当然没有内容)。

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

1 个答案:

答案 0 :(得分:0)

  

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

那不是真正的MVC,对吧?

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

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