5

これは、 objective-c ライブラリを xamarin プロジェクトにバインドすることに関する前回の質問のフォローアップです。だから私は自分でAPI定義を作成することを考えましたが、目的のcデリゲートをC#デリゲート/イベントに書き換える方法がわかりません。Objective-C のデリゲートは C# のデリゲートと同じではなく、C# のイベントに似ていることがわかりました。

これは、目的の c デリゲートの定義です (ヘッダー ファイルから)。

@protocol LineaDelegate
@optional

-(void)connectionState:(int)state;

@end

これは (ヘッダー ファイルからの) Objective-C クラス定義です。

@interface Linea : NSObject

-(void)connect;

@end

connect メソッドはバックグラウンドで動作し、connectionState デリゲートを介して呼び出し元に接続の成功を通知します。

さて、どうすればAPIを正しくバインドできますか? これまでのところ、これは私の ApiDefinition.cs です。

[BaseType(typeof(NSObject))]
interface Linea{
     [Export ("isPresent")]
     bool IsPresent();

     //the delegate that will be notified of Linea events
     [Export("addDelegate:")]
     void AddDelegate (NSObject newDelegate);

     [Export("connect")]
     void Connect ();
}

Objective-C デリゲートを Xamarin スタジオと C# で役立つものに変換するにはどうすればよいですか?

4

2 に答える 2

4

さて、ここに質問を投稿すると、自分で解決策を見つけます...私自身の参照用だけでなく、同じ問題に苦しむ他の人のためにも解決策をここに投稿します.

このチュートリアル (第 4.3 章を参照)を見つけて、弱いデリゲートを使用する必要があると考えました。魔法のように働いています!

于 2013-08-21T11:22:59.773 に答える
2

あなたは LineaSDK をバインドしようとしているようですが、幸いなことに、完全なバインドは既に利用可能です:

https://github.com/mono/monotouch-bindings/tree/master/LineaPRO

于 2013-08-21T17:37:27.633 に答える