【发布时间】:2014-09-11 14:03:53
【问题描述】:
我正在尝试使用“自动保存扩展项目”功能。当我用它的孩子展开一个组并重新启动应用程序时,所有孩子都再次折叠,我不知道为什么他们不会保持展开状态。 我正在使用核心数据来存储我的源列表项。
这是我到目前为止所做/设置的:
- 在 NSOutlineView(源列表)中选中“自动保存展开的项目”
- 为“自动保存”设置名称
- 分配给我的控制器的数据源和委托出口
这是我对 outlineView:persistentObjectForItem 和 outlineView:itemForPersistentObject 的实现。
- (id)outlineView:(NSOutlineView *)anOutlineView itemForPersistentObject:(id)object
{
NSURL *objectURI = [[NSURL alloc] initWithString:(NSString *)object];
NSManagedObjectID *mObjectID = [_persistentStoreCoordinator managedObjectIDForURIRepresentation:objectURI];
NSManagedObject *item = [_managedObjectContext existingObjectWithID:mObjectID error:nil];
return item;
}
- (id)outlineView:(NSOutlineView *)anOutlineView persistentObjectForItem:(id)item
{
NSManagedObject *object = [item representedObject];
NSManagedObjectID *objectID = [object objectID];
return [[objectID URIRepresentation] absoluteString];
}
有什么想法吗?谢谢。
编辑: 我有线索!问题可能是树控制器没有按时准备好它的内容。 applicationDidFinishLaunching、outlineView:persistentObjectForItem 等方法在数据加载之前执行,或者说 NSOutlineView 尚未完成初始化。任何想法如何解决这个问题?
【问题讨论】:
-
您找到解决方案了吗?我有一个类似的问题,虽然我不使用 CoreData 并使用绑定。实际上,outlineView:itemForPersistentObject: 方法在应用程序完成启动之前被调用。