自动保存NSOutlineView的扩展项目不起作用

kre*_*ema 7 objective-c nsoutlineview

我正在尝试使用"自动保存扩展项目"功能.当我使用其子项扩展组并重新启动应用程序时,所有子项都会再次折叠,我不知道为什么它们不会保持扩展状态.我正在使用核心数据来存储我的源列表项.

这是我到目前为止所做的/设置:

  • 检查NSOutlineView中的"自动保存扩展项目"(源列表)
  • 为"自动保存"设置名称
  • 分配给我的控制器的dataSource和委托出口

这是我对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];
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢.

编辑: 我有一个线索!问题可能是树控制器没有按时准备其内容.方法applicationDidFinishLaunching,outlineView:persistentObjectForItem等在数据加载之前执行,或者NSOutlineView尚未完成初始化.任何想法如何解决这个问题?

Kar*_*ten 4

我遇到的问题是我的 -outlineView:itemForPersistentObject: 实现根本没有被调用。事实证明,当设置“autosaveExpandedItems”或“autosaveName”时,会调用此方法。我的解决方案是在代码中设置这两个属性,而不是在 InterfaceBuilder 中设置。当我在分配委托后设置属性时,该方法将被调用。