我有一个自定义的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中注释掉数据源行,它运行正常(但当然没有内容)。
什么可能导致我每次都遇到不同的运行时错误,哪里可能出错?
答案 0 :(得分:0)
myView应该是myView.tv1的数据源和委托,因为它 不触及我的数据模型并且是静态的
那不是真正的MVC,对吧?
如果您为每个表准备了单独的组合委托和数据源类,我认为您将能够更快地跟踪问题(或轻松避免它们)。 table1
数据源可能是MyView
的内部类。
保持表所有者保留委托/数据源引用至关重要,因为表本身不会保留它(对于将委托/数据源设置为self
这两种情况,这可能不是那么重要对于table1(MyView)和table2(MyController),但是如果创建单独的委托和数据源类,则需要记住它。无论如何,您需要保留您用作数据源的array
。