我正在使用具有瞬态NSDate属性的核心数据NSFetchedResultsController UITableView。我将其作为瞬态属性的主要原因是我的UITableView条目基于NSDate放入部分,但是当日期更改时可以在各部分之间移动。
到目前为止它看起来效果很好,但它只更新/刷新(我真的很新,所以我不知道我是否使用了正确的术语,抱歉!)当我关闭应用程序时并从多任务中杀死它,或通过Xcode重新运行它。如果我不这样做,这些项目不会改变,也不会放入正确的部分。有没有办法手动让它刷新,所以用户不需要这样做让它运行正确?
谢谢!
答案 0 :(得分:7)
首先,确保在创建获取的结果控制器时,transient属性仅用于sectionNameKeyPath
。最佳名称sectionIdentifier
(正如Apple在其示例代码中所做的那样。)实际日期应该是您实体的单独属性。 (我会称之为dateAttribute
。
第二次,请确保在Entity.m文件中指定密钥路径依赖项:
+ (NSSet *)keyPathsForValuesAffectingSectionIdentifier {
// If the value of dateAttribute changes, the section identifier may change as well.
return [NSSet setWithObject:@"dateAttribute"];
}
第三次,确保在您的控制器中,您通过
对托管对象上下文中的更改作出适当的反应- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
if (!self.tableView.editing) [self.tableView reloadData];
// the quick and dirty method without animations;
// see referenced code for a more pleasant approach
}
如果不清楚,请查看Apple示例DateSectionTitles。
答案 1 :(得分:3)
refreshObject:mergeChanges:
时,瞬态属性会刷新。
Mundi提供的应用键值观察机制的解决方案也可能有效,如果确实如此,它肯定比明确刷新更方便。