デリゲートメソッドでEventArgs属性を使用すると、最初のものを除くメソッドパラメータに基づいたプロパティを持つイベントハンドラクラスが生成されます。Xamarin iOS EventArgsに最初のプロパティがありません。
生成されたイベントargsクラスに最初のパラメータがありません。例えば
:
[Protocol, Model]
[BaseType(typeof(NSObject))]
public interface TestDelegate
{
// @required -(void)DidReceiveFrom:(NSString * _Nonnull)p1 withP2:(NSString * _Nonnull)p2 withP3:(NSString * _Nonnull)p3 withP4:(NSString * _Nonnull)p4;
[Abstract]
[Export("DidReceiveFrom:withP2:withP3:withP4:")]
[EventArgs("DidReceiveFrom")]
void DidReceiveFrom(string p1, string p2, string p3, string p4);
そして、生成されたのEventArgsクラスは次のようになります。だから、それは間違いなく、P1プロパティを行方不明
//
// EventArgs classes
//
public partial class DidReceiveFromEventArgs : EventArgs {
public DidReceiveFromEventArgs (string p2, string p3, string p4)
{
this.p2 = p2;
this.p3 = p3;
this.p4 = p4;
}
public string p2 { get; set; }
public string p3 { get; set; }
public string p4 { get; set; }
}
。この動作を回避する方法は?
これはiOSバインディングプロジェクトですので、上記のサンプルコードからC#デリゲートコードが生成されます。デリゲートを編集して最初のパラメータとして送信者を使用したり使用したりすることはできません。私はちょうどC#イベントを使用し、EventArgsクラスのすべてのパラメータを持っていて、送信者は最初のイベントargsプロパティではなく、実際の送信者オブジェクトを含む必要があります。 – awattar
@awattarこのC#コードを書くか、objcファイルから生成しましたか? –
コードはsharpieツールで生成されましたが、強力または弱い代理人の代わりにC#イベントを使用したいのでEventArgs属性を追加しました。デリゲートメソッドから生成された最初のプロパティが、ライブラリEventArgsクラスをバインドして生成されたものであることを除いて、すべて正常に動作します。 – awattar