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类。