如何呈现一个空单元?

时间:2015-07-21 15:12:55

标签: ios objective-c uitableview

对于大多数人来说,我的任务很简单,但显然我在这里做错了。

我有两个表视图控制器,我想根据某些对象状态填充它们的单元格。我正在处理核心数据,所以也在做fetchResultController

在其中一个视图控制器中,我可以更改单元格对象的状态(不是实际单元格,填充单元格的对象),每当发生这种情况时,我想从表格视图中删除此单元格。在该视图控制器中,我想只显示填充它们的对象具有status = 0的单元格。但我不想删除已删除的那些,只是为了更改他们的status to 1,然后在其他视图控制器中删除它们,如果他们有status = 1

所以我正在做的是:

每当调用commitEditingStyle时:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {

    if (editingStyle == UITableViewCellEditingStyleDelete) {
        Target *target = [self.fetchedResultController objectAtIndexPath:indexPath];

        target.status = @1;
    }

    if ([_delegate respondsToSelector:@selector(didDeleteObject)]) {
        [self fetchData];
        [_delegate didDeleteObject];
    }

}

现在我想到的是cellForRowAtIndexPath方法在我返回像这样的单元格时添加一个条件:

if ([target.status  isEqual:@0]) {
        return cell;
    }
    return NULL;
}

因为我只想呈现状态为0的单元格

所以现在很明显我不能进入这个表视图,因为我必须在这个方法中返回一个单元格而没有完成,我怎么能说如果目标目标的雕像不同于1那么不显示单元格? / p>

其他代码解决方案也很棒:)

感谢!!!

2 个答案:

答案 0 :(得分:0)

你不能这样做。

您必须设置动态numberOfRowsInSection:,具体取决于Target status属性等于@0的数量tableView:cellForRowAtIndexPath: 因此,在@0中,只有当状态为target.status = @0时才会返回单元格。

如果你将dataSource中的dataSource与// This is the point where you have an update dataSource array (not splitted) updatedDatas = [Manager getLatestData]; if (dataSource.count > 0) [dataSource removeAllObjects]; [updatedDatas enumerateObjectsUsingBlock:^(Target *obj, NSUInteger idx, BOOL *stop) { if ([obj.status integerValue] == 0) [dataSource addObject: obj]; }]; updatedDatas = nil; // This is the numberOfRowsInSection: - (NSInterger)numberOfRowsInSection:(NSInteger)section{ return dataSource.count; } 和其他人分开,对我来说会更好。

正确的方法是

tableView:cellForRowAtIndexPath:

NSMutableArray中,您现在将使用带有简单objectAtIndex:的dataSource <item name="android:windowContentOverlay">@null<item/> 来访问正确的元素

答案 1 :(得分:0)

您应该能够使用谓词

过滤掉提取请求
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Target"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"status == %@", [NSNumber numberWithBool:NO]];
[fetchRequest setPredicate:predicate];

当您将status属性设置为1时,FetchedResultsController将自动从tableView中删除单元格,但该对象不会被删除。您无需在cellForRowAtIndexPath中执行任何操作。在另一个tableView中,将谓词设置为仅提取status == 1。 此外,请确保在更改属性值时保存managedObjectContext。

Target *target = [self.fetchedResultController objectAtIndexPath:indexPath];

target.status = @1;

NSError *error = nil;
    if (![self.managedObjectContext save:&error]) {
        NSLog(@"Save Failed! %@ %@", error, [error localizedDescription]);
    }