1

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

[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

我没有在网上找到任何指向我解决方案的东西,我想知道是否有人对如何使其工作有任何想法。

4

1 回答 1

0

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

你应该-moveItemAtIndex:inParent:toIndex:inParent:改用。

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

于 2013-06-12T01:47:48.410 回答