这是我的代码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSInteger numberOfRowsPerSection = 0;
if (section == 0) {
for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
BNRItem *item = [[[BNRItemStore sharedStore] allItems] objectAtIndex:i];
if ([item valueInDollars] > 50) {
numberOfRowsPerSection ++;
}
}
}else{
for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
BNRItem *item = [[[BNRItemStore sharedStore] allItems] objectAtIndex:i];
if ([item valueInDollars] == 73) {
numberOfRowsPerSection ++;
}
}
}
return numberOfRowsPerSection;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if (!cell) {
cell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"];
}
BNRItem *p = [[[BNRItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];
if ([p valueInDollars] > 50 && indexPath.section == 0) {
[[cell textLabel] setText:[p description]];
}else if(indexPath.section == 1){
[[cell textLabel] setText:[p description]];
}
return cell;
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
我想在一个部分中显示结果&gt; 50和其他部分结果的其余部分但我不知道该怎么做。我在每个部分都得到了重复的结果。
由于
答案 0 :(得分:1)
您的代码并未反映您所描述的内容(&gt; 50和== 73是相交的):
if (section == 0) {
for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
...
if ([item valueInDollars] > 50) {
...
}
}
}else{
for (int i = 0; i < [[[BNRItemStore sharedStore] allItems] count]; i ++) {
...
if ([item valueInDollars] == 73) {
...
}
}
}
这条线也不正确:
BNRItem * p = [[[BNRItemStore sharedStore] allItems] objectAtIndex:[indexPath row]];
因为indexPath.row将使用indexPath.section(这意味着该行相对于该部分,而不是整个表)。这是导致问题在两个部分都具有相同结果的主要原因。
无论如何,我的建议是执行预处理步骤(可能在viewDidLoad或其他地方)将数组拆分为2个数组(每个部分一个),而不是只为这两个部分使用一个数组。
答案 1 :(得分:0)
如果您使用的是 NSFetchedResultsController ,则可以使用 sectionNameKeyPath:参数指定“group-by”参数。在您的情况下,您可能只是为数组中的对象创建一个简单的0/1属性。
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:_managedObjectContext
sectionNameKeyPath:@"threshold"
cacheName:@"Root"];