[英]How should I store a bunch of data locally to display on a UITableView?
[英]Should I store data in my custom UITableView?
我有2个viewControllers,每个viewControllers包含一个UITableView和其他子视图。 2个UITableView具有相同的节结构和单元格类型,但数据源不同。
因此,我决定将此UITableView提取到自定义UITableView中。 自定义UITableView实现了诸如tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
,并且是其自己的数据源和委托。 viewController仅提供数据。
问题是我不知道哪种方法是viewController提供数据的最佳方法。 我可以想到两种方式:
在MyCustomTableView.h中:
@protocol MyCustomTableViewDataProvider <NSObject>
- (NSArray*)dataArray;
@end
@interface MyCustomTableView : UITableView
@property (nonatomic, weak) id<MyCustomTableViewDataProvider> dataProvider;
@end
viewController应该实现以下协议:
- (NSArray*)dataArray {
return self.dataArray;
}
在MyCustomTableView.m中,我可以像这样使用它:
NSArray* dataArray = [self.dataProvider dataArray];
在MyCustomTableView.h中:
@interface MyCustomTableView : UITableView
@property (nonatomic, weak) NSArray* dataArray;
@end
每当数据发生变化时,viewController应该通知自定义TableView更新其数据:
self.customTableView.dataArray = self.dataArray;
在MyCustomTableView.m中,我可以像这样使用它:
self.dataArray
似乎第二种方法可以保存一些代码,但是我听说您不应该在视图中存储数据,因为它违反了MVC原理。 你能给我一些建议吗? 非常感谢!
恕我直言,除非绝对必要,否则我不会继承任何UIView。 TableViews和Collections均提供协议以正确控制其行为。
如果您是我,为了保持ViewController简洁明了,我将创建一个自定义NSObject,同时实现UITableViewDelegate和DataSource协议。 此类将负责提供单元格和节的样式(在这两个表视图中共享)以及数据源。 当然,该对象必须具有引用其TableView的属性。
ViewController仅在需要时负责触发数据检索。 该数据应传递到该自定义NSObject,后者将负责更新表视图。
顺便说一句,甚至可以通过InterfaceBuilder添加该对象。
我知道它有些旧,但是您可以检查一下:更轻便的VC这只是迈向MVVM的一步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.