gpt4 book ai didi

cocoa - NSOutlineView 和对象持久性奇怪的行为

转载 作者:行者123 更新时间:2023-12-03 16:41:07 26 4
gpt4 key购买 nike

我对此感到很难过。当涉及到基于 NSOutlineView 的 View 的对象持久性时,我遇到了非常奇怪的行为。目前我有一个对象,其中包含一个 object1 数组,该对象包含一个 object2 数组,该数组包含一个 object3 数组,等等...每个类(对象)都有一个 isEqual: 方法和一个 isEqualToObject: 方法。我已经修改了一遍又一遍,它们工作得很好。

现在,当我展开一个项目时,它会保存到默认 plist 中,并且我已经检查过,保存的项目数是正确的。

但是当我再次打开文档时会发生什么;有时所有行都按照我离开的方式展开,有时没有任何行展开,有时 NSOutlineView 会展开某些行,但不会展开其他行。

请注意,我没有使用 NSTreeController。我正在使用 NSOutlineView 数据源和委托(delegate)。下面的方法都是这样实现的。还设置了轮廓 View 的自动保存名称。

- (id)outlineView:(NSOutlineView *)outlineView persistentObjectForItem:(id)item {
return [NSKeyedArchiver archivedDataWithRootObject:item];
}

- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object {
return [NSKeyedUnarchiver unarchiveObjectWithData:object];

}

基本上有时有效,有时有效,有时根本无效。这是非常随机的。

奇怪的是,我已经放置了 NSLog 并且每个项目都找到了匹配项,但是......大纲 View 没有扩展它。

最佳答案

我让它工作了。所以我最终要做的是搜索我拥有的每个对象数组并返回匹配的对象(不是持久对象,而是已经属于我的数据一部分的对象)。换句话说

- (id)outlineView:(NSOutlineView *)outlineView itemForPersistentObject:(id)object {

id persistentObject =[NSKeyedUnarchiver unarchiveObjectWithData:object];

for (Class * a in dataArray) {
if ([a isEqual:persistentObject]) {
return a; //instead of returning persistentObject
}
}
}

这成功了。我对此进行了长期而广泛的搜索,我希望有人发现它有用。

关于cocoa - NSOutlineView 和对象持久性奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21842801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com