在NSOutlineView上编译错误:语义问题' moveRowAtIndex:toIndex:'不可用

时间:2013-06-11 23:00:24

标签: macos cocoa nstableview nsoutlineview

当我尝试编译以下代码时,

[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

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSTableView_Class/Reference/Reference.html#//apple_ref/occ/cl/NSTableView

我没有在网上找到任何指向解决方案的内容,我想知道是否有人对如何使其发挥作用有任何想法。

1 个答案:

答案 0 :(得分:0)

-moveRowAtIndex:toIndex:NSTableView中声明并定义。请注意NSOutlineView继承自NSTableView,但由于其分层性质,某些NSTableView方法不可用,这就是您遇到编译器错误的原因。

您应该使用-moveItemAtIndex:inParent:toIndex:inParent:代替。

不幸的是,文档还没有反映出这一点。浏览头文件通常很有用,因为它们在声明方面更准确,并且往往是最新的文档。如果您打开NSOutlineView.h,您会注意到-moveItemAtIndex:toIndex:声明为UNAVAILABLE_ATTRIBUTE,对应__attribute__((unavailable))