当我尝试编译以下代码时,
[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
我在网上没有找到任何可以为我提供解决方案的内容,我想知道是否有人对如何使其发挥作用有任何想法。
最佳答案
-moveRowAtIndex:toIndex:
在 NSTableView
中声明和定义。请注意NSOutlineView
继承自NSTableView
但是,由于其分层性质,一些 NSTableView
方法不可用,这就是您收到编译器错误的原因。
您应该使用-moveItemAtIndex:inParent:toIndex:inParent:
相反。
不幸的是,文档尚未反射(reflect)这一点。浏览头文件通常很有用,因为它们在声明方面更准确,并且在文档方面往往是最新的。如果你打开 NSOutlineView.h,你会注意到 -moveItemAtIndex:toIndex:
声明为 UNAVAILABLE_ATTRIBUTE
,对应于 __attribute__((unavailable))
.
关于macos - NSOutlineView 编译错误 : Semantic Issue 'moveRowAtIndex:toIndex:' is unavailable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17055231/