[英]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.