用数据填充TableView部分??

时间:2012-12-19 09:00:19

标签: iphone objective-c ios uitableview

我在一个数组中有一个字典,其中包含name,pic和day等属性(这一天只是来自picker view的字符串)。

我想显示每周的表格视图并按日排列项目。

我正在计划的是每天创建一个新数组,将我的所有数据过滤到这些数组中,然后填充这些部分。这样做有更聪明的方法吗?

如果我不首先过滤我的数据,我想不出另一种获取numberOfRowsInSection的方式。

1 个答案:

答案 0 :(得分: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:的频率和完整数据源的大小,这可能会导致相当严重的性能损失。您可能最好不要执行最初建议的操作:提前过滤数据并使适当的数组保持最新,以便在表视图中使用。 (虽然记住,过早的优化往往弊大于利!)

相关问题