对于大多数人来说,我的任务很简单,但显然我在这里做错了。
我有两个表视图控制器,我想根据某些对象状态填充它们的单元格。我正在处理核心数据,所以也在做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>
其他代码解决方案也很棒:)
感谢!!!
答案 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]);
}