2012-12-19 96 views
2

我有一個數組中的字典,其中包含諸如名稱,圖片和日期等屬性(日期只是來自picker view的字符串)。用數據填充TableView部分?

我想顯示每週表格視圖並按日排列項目。

我打算做的是每天創建一個新的數組,將所有數據過濾到這些數組中,然後填充這些部分。有沒有更聰明的方法呢?

如果我不先過濾數據,我無法想到另一種方式獲得numberOfRowsInSection

回答

1

另一種方法是在每次需要返回-tableView:numberOfRowsInSection:的值時過濾您的字典數組。你會

  • 弄清日對應於所請求的部分,然後
  • 過濾您根據當天字典的數組,並返回一個數

一些代碼(編譯沒有,未測試)要做到這一點可能看起來像:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSString *day = [self _dayForTableViewSection:section]; // assuming this exists 
    NSPredicate *filter = [NSPredicate predicateWithBlock:^(id obj, NSDictionary *bindings) { 
     assert([obj isKindOfClass:[NSDictionary class]]); // array contains dictionaries 
     return [obj[@"day"] isEqualToString:day]; // assuming key is @"day" 
    }]; 
    NSArray *matchingDictionaries = [self.allDictionaries filteredArrayUsingPredicate:filter]; // assuming data source is allDictionaries 
    return matchingDictionaries.count; 
} 

根據你的代碼是如何頻繁調用-tableView:numberOfRowsInSection:和您的完整的數據源的大小,這庫侖d招致相當嚴重的表現。您可能會更好地執行您最初的建議:提前過濾數據,並將適當的陣列保持最新,以便在您的表格視圖中使用。 (雖然要記住,過早的優化往往會造成更多的傷害,而不是好的!)

+0

我已經寫了我上面提出的建議,但仍然無法理解。我有7個數據陣列。我怎樣才能使用'(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath'因此每個數組將在一個節? – Segev

+0

這幾乎聽起來像是一個單獨的問題:)但你要做的是使用'indexPath.section'確定使用哪個數組(使用7個),然後使用'indexPath.row'作爲索引該數組。使用您提取的任何對象來填充您的出隊UITableViewCell並將其返回。 – Tim