当我尝试编译以下代码时,
[self.outlineView beginUpdates];
[self.outlineView moveRowAtIndex:row toIndex:targetRow];
[self.outlineView endUpdates];
我收到以下编译错误:
语义问题'moveRowAtIndex:toIndex:'不可用
NSOutlineView上的所有其他操作除此之外都有效。
值得注意的一件事是,当XCode自动填充时,它会在它上面显示一个红线描边,好像它已被弃用但文档说它有效。
我的项目是为OSX 10.8构建的,文档说这适用于OSX 10.7及更新版本。
http://developer.apple.com/library/mac/#releasenotes/General/MacOSXLionAPIDiffs/AppKit.html
我没有在网上找到任何指向解决方案的内容,我想知道是否有人对如何使其发挥作用有任何想法。
答案 0 :(得分:0)
-moveRowAtIndex:toIndex:
在NSTableView
中声明并定义。请注意NSOutlineView
继承自NSTableView
,但由于其分层性质,某些NSTableView
方法不可用,这就是您遇到编译器错误的原因。
您应该使用-moveItemAtIndex:inParent:toIndex:inParent:
代替。
不幸的是,文档还没有反映出这一点。浏览头文件通常很有用,因为它们在声明方面更准确,并且往往是最新的文档。如果您打开NSOutlineView.h,您会注意到-moveItemAtIndex:toIndex:
声明为UNAVAILABLE_ATTRIBUTE
,对应__attribute__((unavailable))
。