在使用xamarin的本机绑定库时获取NSinvalid参数异常

时间:2018-11-28 14:40:16

标签: c# xamarin xamarin.forms xamarin.ios ios-frameworks

所以我一直在尝试创建一个可以在Xamarin Forms中使用的本机绑定,所以很好,但是在一个实例中我正在添加新的

  

Objective-C异常抛出。名称:NSInvalidArgumentException原因:-[BTDropInRequest setCardholderNameSetting:]:无法识别的选择器已发送到实例

这是我的ApiDefinition类

[NullAllowed, Export("cardholderNameSetting", ArgumentSemantic.Strong)]
        BTFormFieldSetting CardHolderNameSetting { get; set; }

我在结构中将BTFormFieldSetting定义为

 [Native]
public enum BTFormFieldSetting : long
{
    BTFormFieldDisabled ,
    BTFormFieldOptional,
    BTFormFieldRequired = 0
}

这是我的iOS Native等效版本

@property (nonatomic, assign) BTFormFieldSetting cardholderNameSetting;

这是为BTFormFieldSetting定义的

    typedef NS_ENUM(NSInteger, BTFormFieldSetting) {
    BTFormFieldDisabled = 0,
    BTFormFieldOptional,
    BTFormFieldRequired
};

@interface BTDropInRequest : NSObject <NSCopying>

我已经为绑定库提供了本机框架,如果我不使用这段代码,它就可以正常工作 任何意见将不胜感激

2 个答案:

答案 0 :(得分:0)

您要绑定到BTDropInRequest的Objective-C属性,而该属性不是@synthesize的属性,因此它不会生成setter和getter方法。

IOW,这是BTDropInRequest.h中的Obj-C源代码:

@property (nonatomic, assign) BTFormFieldSetting cardholderNameSetting;

通常,执行此操作时,将使用@synthesize实现文件中的BTDropInRequest.m自动创建setCardHolderNameSetting:选择器,该选择器允许您使用

设置属性值
[BTDropInRequest setCardholderNameSetting:<Instance of BTFormFieldSetting>]

,还创建一个cardholderNameSetting选择器,该选择器允许获取属性值。 implementation file of BTDropInRequest中未完成此操作。如果是这样,您会看到:

@synthesize cardholderNameSetting;

但它不存在,因此缺少选择器的错误。不知道如何在不更改Obj-C源代码的情况下解决此问题。

答案 1 :(得分:0)

与任何技术都不相关,但是需要解决与此相关的所有依赖关系,一旦我做到了,一切就开始起作用