【发布时间】:2015-07-03 15:51:57
【问题描述】:
我在我的项目中使用核心数据,并且在我的一个表格视图中,我用我拥有的一些对象填充单元格。
此表视图中的第一个单元格是我要基于此对象“状态”属性删除的对象。因此,在另一个视图控制器中,我将表中的第一个对象“状态”更改为“1”,我希望能够直观地删除单元格,但不能删除核心数据对象。
所以现在我的 commitEditingStyle 方法看起来像这样:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
Target *target = [self.fetchedResultController objectAtIndexPath:indexPath];
target.status = @1;
CoreDataStack *stack = [CoreDataStack defaultStack];
[[stack managedObjectContext] deleteObject:target] ;
[stack saveContext];
}
if ([_delegate respondsToSelector:@selector(didDeleteObject)]) {
[self fetchData];
[_delegate didDeleteObject];
}
}
目前,如您所见,我正在从堆栈中删除记录,但我可以做的是删除这些行:
CoreDataStack *stack = [CoreDataStack defaultStack];
[[stack managedObjectContext] deleteObject:target] ;
[stack saveContext];
现在我不会删除记录,但会删除单元格。 现在奇怪的事情(对我来说)是当我删除这些行时,我没有删除记录,但单元格也没有被删除......我不明白为什么这些行删除了单元格......不仅仅是那些行删除记录..?
谢谢
didDeleteObject 方法:
- (void)didDeleteObject {
self.homeLabel.text = stackTableViewController.currentTarget;
self.homeLabel.frame = homeLabelRect;
for(int i = 40; i>5; i--){
CGRect labelRect = [self.homeLabel.text
boundingRectWithSize:CGSizeMake(self.view.frame.size.width, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{
NSFontAttributeName : self.homeLabel.font
}
context:nil];
if(labelRect.size.height < self.homeLabel.frame.size.height){
self.homeLabel.font =[UIFont fontWithName:@"Candara-Bold" size:i];
return;
}
}
}
【问题讨论】:
-
分享
didDeleteObject方法的代码。 -
@Gandalf 完成。 (它在另一个 vc 中,因为它是一个委托方法)
-
好吧,老实说,我希望你用这种方法重新加载表数据。但因为你不是这样,所以没有帮助。但是让我给你一些指示: - 1)在你的方法中,你正在删除记录,然后你必须在 fetchData 之后重新加载表数据,这将自动删除该行,因为记录的数量少了一个。这就是删除行的原因。 @Solution - 为记录维护一个本地数组,在删除单元格时,从数组中删除该对象并重新加载表。关注这个Link
标签: ios objective-c uitableview core-data nsfetchedresultscontroller