iOS - 如何刷新/更新Core Data瞬态属性?

时间:2012-08-04 21:03:52

标签: objective-c ios core-data refresh transient

我正在使用具有瞬态NSDate属性的核心数据NSFetchedResultsController UITableView。我将其作为瞬态属性的主要原因是我的UITableView条目基于NSDate放入部分,但是当日期更改时可以在各部分之间移动。

到目前为止它看起来效果很好,但它只更新/刷新(我真的很新,所以我不知道我是否使用了正确的术语,抱歉!)当我关闭应用程序时并从多任务中杀死它,或通过Xcode重新运行它。如果我不这样做,这些项目不会改变,也不会放入正确的部分。有没有办法手动让它刷新,所以用户不需要这样做让它运行正确?

谢谢!

2 个答案:

答案 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提供的应用键值观察机制的解决方案也可能有效,如果确实如此,它肯定比明确刷新更方便。