从tableViewController中分离UITableView委托和数据源

时间:2014-09-07 17:47:43

标签: ios objective-c uitableview delegates datasource

由于委托和数据源方法以及我有多个UITableViewCells子类和每个子类的不同单元格布局,我的tableView控制器变得越来越大。我在看this post但它实际上只是讨论了如何在dataSource / delegate类中实现方法,而不是如何将它连接到视图控制器。

因此,我创建了一个符合tableView委托和数据源协议的类,添加了一个tableView属性,用作tableView的引用,以及一个posts属性,用作数据源数组。

@interface SPPostsDataSouceAndDelegate : NSObject <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic) NSArray *posts;

@end

我将我的tableView控制器中的委托和数据源方法切换到该类的实现中。然后在我的tableView控制器中,我为该dataSource和委托类添加了一个属性。

@property (nonatomic) SPPostsDataSouceAndDelegate *postsDataSourceAndDelegate;

并在视图中将load设置数据源并委托为该属性,并将该属性设置为tableView并将属性发布到我的视图控制器的属性。

self.postsDataSourceAndDelegate = [[SPPostsDataSouceAndDelegate alloc] init];
self.tableView.delegate = self.postsDataSourceAndDelegate;
self.tableView.dataSource = self.postsDataSourceAndDelegate;
self.postsDataSourceAndDelegate.posts = self.posts; 

然而它不起作用。有什么遗失吗?就像我说的那样,我试着按照我链接的答案,但它并没有真正解释这一部分,而我发现的其他所有内容都没有任何关于在你真正创建单独的类之后该做什么,所以我在这里丢失了。

编辑:我重构了我的代码,以便委托/数据源不再有对tableView的引用。这很好。

仍然没有做任何事情

1 个答案:

答案 0 :(得分:1)

想通了。从后端检索数据源后,需要更新数据源的posts属性。能够重构我的许多自定义单元格代码以及使用提到的here动态选择器方法去除表格中所有不同单元格的所有if块。现在一切都很好了

 [allPostsQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {

        if (!error) {


            self.postsDataSourceAndDelegate.posts = objects;
            [self.tableView reloadData];