2014-12-02 44 views
2

我正在將我們的源代碼轉換爲使用Xamarin.iOS統一API(相當痛苦...... Xamarin)。目前,我有一幫這個味道的錯誤:由於其保護級別,ExportAttribute()無法訪問

ExportAttribute()無法訪問由於其保護級別

據我所知,已經不再是一個公共參數的構造函數 - 那我應該提供ExportAttribute構造函數讓這個工作 - 我不是這個代碼的原始作者,所以我不完全確定在這裏做什麼。我有這樣的方法:

[Foundation.Export()] 
    private void CameraSnapshotComplete() 
    { 
    } 

什麼我傳遞給在這種情況下ExportAttribute構造函數?這種方法被髮送到AnimationDidStop方法是這樣的:

UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete")); 

所以我只是通過「CameraSnapshotComplete」的構造?我有這些要替換的數以億計 - 所以在我開始做這件事之前想要一點反饋意見,並且發現我做錯了。

回答

4

如果選擇器名爲CameraSnapshotComplete那麼[Export]屬性必須使用相同的名稱。 IOW如果你這樣稱呼它:

UIView.SetAnimationDidStopSelector(new ObjCRuntime.Selector("CameraSnapshotComplete")); 

,則該方法應導出,如:

[Foundation.Export("CameraSnapshotComplete")] 
private void CameraSnapshotComplete() 
{ 
} 

在許多情況下,有API的替代,使用選擇,這將使代碼更強類型(並避免難以調試的潛在拼寫錯誤)。

+0

瞭解有更好的方法可以做到這一點。但是很多這些代碼是從MonoTouch的日子回來的,重新編寫它現在不是我們的選擇。目前有50萬條線路需要通過這個端口才能實現新的統一API。 – user633077 2014-12-02 16:38:30

+1

我明白:-)但是,作爲一般規則,我希望我的答案適用於每個讀者(今天或兩年)的人。 – poupou 2014-12-02 16:41:28

+0

公平 - 真實! :-) – user633077 2014-12-02 16:44:10

相關問題