跟踪"无法识别的选择器发送到实例" Xamarin中的例外情况

时间:2017-10-26 21:54:33

标签: ios xamarin binding xamarin.ios

我试图让它发挥作用,但我肯定在某处犯了错误。这是根据C头的Delegate类(剪下):

@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);
}

在代码中,当我尝试调用&#34; middleware.SetDevice(&#39; name&#39;,this);&#34;这是一个继承自委托的类,我得到了异常。

有什么明显的错过我错过了吗?

2 个答案:

答案 0 :(得分:1)

<telerik:RadWatermarkTextBox x:Name="txtSoldToName" Padding="10,0,0,0" Text="{Binding soldToName, UpdateSourceTrigger=PropertyChanged}" MaxLength="60"> <telerik:RadWatermarkTextBox.WatermarkContent> <TextBlock Text="Limit to 60 characters or less" FontSize="12" Foreground="#969696" /> </telerik:RadWatermarkTextBox.WatermarkContent> </telerik:RadWatermarkTextBox> 方法的选择器错误。

setDevice方法的正确选择器为-(void)setDevice :(NSString *)deviceName :(id)setDelegate。这是因为此方法中的第二个参数没有外部名称。

绑定的最终条目应如下所示

setDevice::

您可以阅读更多有关如何在Apple docs中构建Objective-C中方法签名的信息。

答案 1 :(得分:0)

还请在情节提要文件中查找未在代码中实现的属性中的组件操作。

就我而言,我已为情节提要文件中的按钮提供了触摸内幕操作,但未在代码中实现。实施此问题后就不再存在。