2017-10-26 6 views
0

これを動作させようとしていますが、どこかで間違いを犯したに違いありません。このCヘッダーごとに(ダウン切り取ら)Delegateクラスである:Xamarinで「インスタンスに送信されたセレクタが認識されない」例外が発生する

このため
@protocol PaymentEngineMiddlewareDelegate <NSObject> 

@required 

/*! 
    @brief Delegate method for startTransaction. 
    @param transResponse - Contains all the transaction response info from the gateway 
*/ 
-(void)transactionComplete :(PaymentEngineTransactionResponse *)transResponse; 
@optional 

/*! 
    @brief Delegate method for device connected. The method gets called when the device is connected 
*/ 
-(void)deviceConnected; 

/*! 
    @brief Delegate method for device disconnected. The method gets called when the device is disconnected 
*/ 
-(void)deviceDisconnected; 

@end 

、私が持っている:

// @interface PaymentEngineMiddlewareDelegate : NSObject 
[BaseType(typeof(NSObject))] 
[Model] 
[Protocol] 
interface PaymentEngineMiddlewareDelegate 
{ 
    [Abstract] 
    [Export("transactionComplete:")] 
    void TransactionComplete(PaymentEngineTransactionResponse transResponse); 

    [Export("deviceConnected")] 
    void DeviceConnected(); 

    [Export("deviceDisconnected")] 
    void DeviceDisconnected(); 
} 

は次にPaymentEngineMiddlewareクラスに対して、ヘッダがこれを持っている:

@interface PaymentEngineMiddleware : NSObject 

+ (PaymentEngineMiddleware *) getInstance; 

@property(nonatomic, strong) id<PaymentEngineMiddlewareDelegate> delegate; 

//------------------------------Device Methods------------------------------ 

/*! 
    @brief This method must be called before starting any transaction. Use it to connect to a device. 
    @param deviceName The name of the device such as icmp or castle 
    @param setDelegate Sets to self 

*/ 
-(void)setDevice :(NSString *)deviceName :(id)setDelegate; 

@end 

そして、そのために、私が持っている:

// @interface PaymentEngineMiddleware : NSObject 
[BaseType(typeof(NSObject))] 
[Protocol] 
interface PaymentEngineMiddleware 
{ 
    // +(id)getInstance; 
    [Static] 
    [Export("getInstance")] 
    PaymentEngineMiddleware GetInstance { get; } 

    [Export("delegate", ArgumentSemantic.Retain)] 
    PaymentEngineMiddlewareDelegate Delegate { get; set; } 

    [Export("setDevice:setDelegate:")] 
    void SetDevice(string deviceName, PaymentEngineMiddlewareDelegate setDelegate); 
} 
を10

コードで、私が "middleware.SetDevice( 'name'、this);をコールしようとすると、これはデリゲートを継承するクラスですが、例外があります。

私が逃した、または間違っていることは明らかですか?

答えて

1

setDeviceの選択が間違っています。

-(void)setDevice :(NSString *)deviceName :(id)setDelegateの正しいセレクタはsetDevice::です。これは、このメソッドの2番目のパラメータに外部名がないためです。

あなたの結合のための最後のエントリは、あなたがObjective-Cの中のメソッドのシグネチャがApple docsに構築されているかについての詳細を読むことができ、この

[Export("setDevice::")] 
void SetDevice(string deviceName, PaymentEngineMiddlewareDelegate setDelegate); 

のようになります。

関連する問題