2

次の Obj-C .h があります。バインドする正しい方法は何ですか?

@interface iSmart : NSObject<EAAccessoryDelegate>{
  id<iSmartDelegate> delegate;
}

@property(nonatomic, assign) id<iSmartDelegate> delegate;
-(id)init;

@end

__________________________________________________________________________________________

@class iSmart;

@protocol iSmartDelegate <NSObject>

-(void) iSmartDidConnect;
-(void) iSmartDidDisconnect;
-(void) cardStatusChanged:(unsigned char)status;

@end

__________________________________________________________________________________________

現時点では、プロトコルとインターフェイスについて次のようにしています。

[BaseType (typeof(NSObject))]
[Model]
interface iSmartDelegate
{
    [Export("iSmartDidConnect")]
    void iSmartDidConnect();

    [Export("iSmartDidDisconnect")]
    void iSmartDidDisconnect();

    [Export("cardStatusChanged:")]
    void CardStatusChanged(Byte status);

}


[BaseType (typeof (EAAccessoryDelegate), 
Delegates=new string [] { "WeakDelegate" },
Events=new Type [] { typeof (iSmartDelegate)})]
interface iSmart
{
    //@property(nonatomic, assign) id<iSmartDelegate> delegate;
    [Export("delegate"), NullAllowed]
    NSObject WeakDelegate { get; set; }

    [Wrap("WeakDelegate")]
    iSmartDelegate Delegate { get; set; }

    //-(id)init;        
    [Export("init")]
    NSObject init();
}

Xamarin Studio Error BI0000: Unexpected error - Please file a bug report at http://bugzilla.xamarin.com (BI0000)でプロジェクトをビルドしようとすると、このエラーが発生します。

ありがとう

4

1 に答える 1

4

プロトコルは ApiDefinition でインライン化されているだけなのでEAAccessoryDelegate、iSmart 定義でいくつかのメソッドを宣言して実装します。

[BaseType (typeof(NSObject))]
interface iSmart : EAAccessoryDelegate{
    //bind the protocol here
    [Export ("accessoryDidDisconnect:")]
    void AccessoryDidDisconnect (EAAccessory accessory);
}

デリゲートのバインドについては、http://docs.xamarin.com/guides/ios/advanced_topics/api_design#Delegatesを参照してください。

[2013 年 2 月 26 日更新] .NET型は Unicode 文字に合わせて 2 バイトの長さであるため、.NETunsigned charにマーシャリングする必要があるネイティブを除いて、デリゲート バインディングは問題ないように見えます。bytechar

[2013-02-27 更新] また、最近質問に追加したように、コンストラクターをバインドする適切な方法は次のようになります ( http://docs.xamarin.com/guides/ios/advanced_topics/binding_objectiveの 3.3 を参照)。 -c_libraries ) :

[Export ("init")]
IntPtr Constructor ();
于 2013-02-25T16:43:58.053 に答える