2013-06-11 35 views
1

當我嘗試編譯下面的代碼,上NSOutlineView編譯錯誤:語義問題 'moveRowAtIndex:toIndex:' 不可用

[self.outlineView beginUpdates]; 
[self.outlineView moveRowAtIndex:row toIndex:targetRow]; 
[self.outlineView endUpdates]; 

我得到以下編譯器錯誤:

語義問題「moveRowAtIndex :toIndex:'is unavailable

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

我沒有在網上找到任何東西,向我指出一個解決方案,我想知道如果任何人有如何使它工作的任何想法。

回答

0

-moveRowAtIndex:toIndex:NSTableView中聲明和定義。請注意,NSOutlineView繼承自NSTableView,但由於其分層性質,某些NSTableView方法不可用,這就是爲什麼您會收到該編譯器錯誤。

您應該使用-moveItemAtIndex:inParent:toIndex:inParent:來代替。

不幸的是,文檔還沒有反映出這一點。瀏覽頭文件通常是有用的,因爲它們更加準確地聲明並且傾向於以最新的文檔方式。如果你打開NSOutlineView.h,你會注意到-moveItemAtIndex:toIndex:被聲明爲UNAVAILABLE_ATTRIBUTE,這對應於__attribute__((unavailable))