Cocoa NSOutlineView moveItem()和reloadItem()没有';行不通
我有一个新的想法。我已经设置了委托和数据源。执行Cocoa NSOutlineView moveItem()和reloadItem()没有';行不通,cocoa,nstableview,appkit,nsoutlineview,Cocoa,Nstableview,Appkit,Nsoutlineview,我有一个新的想法。我已经设置了委托和数据源。执行outlineView.reloadData()后,它会正确显示所有数据 您可以这样描述我的大纲视图: 房间A -灰烬 -布洛克 B室 -薄雾 -奥克教授 我对数据进行了一些编辑(而不是大纲视图),并将“Misty”移动到房间A 房间A -灰烬 -布洛克 -薄雾 B室 -奥克教授 执行outlineView.reloadData()后,它会正确显示更新的数据 然后,我改变 outlineView.reloadData() 与 outlineView
outlineView.reloadData()后,它会正确显示所有数据
您可以这样描述我的大纲视图:
房间A
-灰烬
-布洛克
B室
-薄雾
-奥克教授
我对数据进行了一些编辑(而不是大纲视图),并将“Misty”移动到房间A
房间A
-灰烬
-布洛克
-薄雾
B室
-奥克教授
执行outlineView.reloadData()
后,它会正确显示更新的数据
然后,我改变
outlineView.reloadData()
与
outlineView.moveItem(在:0,inParent:room[1],到:2,inParent:room[0])
但什么也没发生。我检查了数据源,但没有调用数据源。仅当我执行outlineView.reloadData()
时才会调用它
我还尝试了outlineView.reloadItem()
,但也没有成功
知道为什么outlineView.moveItem()
不起作用吗?我不敢相信Cocoa/Appkit框架与UIKit相比有多么不可靠
moveItem()
无法工作的原因是NSOutlineView仅支持Objective-C NSObject。不能对NSOutlineView的item对象使用普通Swift类。为什么outline视图要调用数据源?项目的数据不会更改。我尝试了这个(作为一个Swift练习,item是一个Swift类),并且moveItem()
确实可以使用动画。你的类符合哈希协议吗?我试过了,它可以工作,即使所有对象返回相同的哈希值<代码>哈希值
未被调用。你能在一个小的测试项目中重现这个问题吗?注意:NSOutlineView
支持Swift对象。您可以为NSOutlineView
的item对象使用普通的Swift类。