5

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

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

谢谢!

4

2 回答 2

7

首先,确保您的瞬态属性仅用于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

于 2012-08-05T17:02:19.637 回答
3

向对象发送 a 时会刷新瞬态属性refreshObject:mergeChanges:

Mundi 提供的应用键值观察机制的解决方案可能也有效,如果有效,肯定比显式刷新方便得多。

于 2012-08-06T06:35:09.113 回答