2013-01-05 54 views
0

我有一個本機庫的下列協議,我試圖爲它編寫一個MonoTouch綁定(它也有一個名爲Brsp的接口部件)。MonoTouch自定義綁定不適用於委託中的某些方法

@protocol BrspDelegate <NSObject> 
@required 
- (void)brsp:(Brsp*)brsp OpenStatusChanged:(BOOL)isOpen; 
- (void)brsp:(Brsp*)brsp SendingStatusChanged:(BOOL)isSending; 
@optional 
- (void)brspDataReceived:(Brsp*)brsp; 
- (void)brsp:(Brsp*)brsp ErrorReceived:(NSError*)error; 
- (void)brspModeChanged:(Brsp*)brsp BRSPMode:(BrspMode)mode; 
@end 

MonoTouch的綁定:

[BaseType(typeof(NSObject))] 
[Model] 
interface BrspDelegate 
{ 
    [Abstract] 
    [Export("brsp:OpenStatusChanged:"), EventArgs("OpenStatus")] 
    void OpenStatusChanged(Brsp brsp, bool isOpen); 

    [Abstract] 
    [Export("brsp:SendingStatusChanged:"), EventArgs("SendingStatus")] 
    void SendingStatusChanged(Brsp brsp, bool isSending); 

    [Export("brspDataReceived:")] 
    void DataReceived(Brsp brsp); 

    [Export("brsp:ErrorReceived:"), EventArgs("Error")] 
    void ErrorReceived(Brsp brsp, NSError error); 

    [Export("brspModeChanged:"), EventArgs("Mode")] 
    void ModeChanged(Brsp brsp, BrspMode mode); 
} 

開放狀態,發送狀態和錯誤接收方法被調用,但是模式改變不起作用。所以委託在Brsp類中被引用,所以這部分應該工作。有一點我得到了modechanged也工作,所以我知道這是所謂的當我調用BPSP類「changeMode」。但後來我搞砸了,現在它不再工作了...

此外,現在我使用委託私人類,而不是基於事件的方法。因爲當我嘗試爲上述方法之一連接生成的事件時,應用程序崩潰而沒有任何MonoTouch的錯誤或警告。

我懷疑自己是不是用綁定100%正確的,所以該方法不膠合在一起的權利,但我已經嘗試了許多,許多不同的事情,據我所知這應該工作...

任何想法?

回答

1

您的

- (void)brspModeChanged:(Brsp*)brsp BRSPMode:(BrspMode)mode; 

結合缺少一個參數。嘗試:

[Export("brspModeChanged:BRSPMode:"), EventArgs("Mode")] 
void ModeChanged(Brsp brsp, BrspMode mode); 
+0

這有助於模式!我以爲我已經嘗試過,但在做了這麼多事情之後,我可能忽略了它。 – Rogier

+0

任何想法爲什麼事件處理程序崩潰應用程序? – Rogier

+0

@Rogier EventArgs不會崩潰你的應用程序,而不是在你的綁定上''導出'正確的'選擇器名稱'確實會使應用程序崩潰,因爲MTouch在ObjC世界上找不到正確的符號名稱。 – dalexsoto

相關問題