2012-06-05 56 views
2

好日子,ObjectiveC中的Monotouch/C#相當於id <SomeType>?

我:

的ObjectiveC:

- (void)addTarget:(id<GPUImageInput>)newTarget; 

C#:

[BaseType (typeof(NSObject))] 
interface GPUImageOutput{ 
    [Export ("addTarget")] 
    void AddTarget(NSObject newTarget); //Suspected source of the error 
} 

導致 「無法識別的選擇發送到實例」 時調用

stillCamera.AddTarget (filter); 

GPUImage.GPUImageOutput filter = new GPUImage.GPUImageSketchFilter(); 

StillCamera的鹼基類型是攝影機其具有鹼基類型GPUImageOutput

GPUImageSketchFilterGPUImageSobelEdgeDetectionFilter其爲GPUImageTwoPassFilter其爲GPUImageFilter其爲GPUImageOutput其爲NSObject的,並在同一時間實現GPUImageInput

任何想法?

謝謝!

回答

1

等效於

// Objective-C 
id<FOO> xxx; 

只不過是 「富」 在C#中。

1

我相信你錯過了一個冒號:

[Export ("addTarget:")] 
+0

工作就像一個魅力。但我仍然感到困惑。你能解釋冒號嗎? – Bagaboo

+0

這就是標準ObjC中選擇器的名稱。一般的規則是:「foo」=沒有參數的方法,「foo:」=帶一個參數的方法,「foo:arg1:」=一個帶有兩個參數的方法等。 –

+0

我明白了。謝謝。這解釋了我有很多崩潰:) – Bagaboo