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

Getting NSinvalid argument exception while consuming a native binding library for xamarin

所以我一直在尝试创建一个可以在 Xamarin Forms 中使用的 Native Binding,所以它很好,但是有一个例子我正在添加一个新的

Objective-C exception thrown. Name: NSInvalidArgumentException Reason: -[BTDropInRequest setCardholderNameSetting:]: unrecognized selector sent to instance

这是我的 ApiDefinition class

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

并且我在 Structs 中将 BTFormFieldSetting 定义为

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

这是我的 iOS 本地等效项

@property (nonatomic, assign) BTFormFieldSetting cardholderNameSetting;

这是为 BTFormFieldSetting

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

@interface BTDropInRequest : NSObject <NSCopying>

我已经包含了绑定库的本机框架,如果我不使用这段代码,它工作正常 任何输入将不胜感激

您正在绑定到 BTDropInRequest 的 objective-C 属性,但不 @synthesize 属性,因此它不会生成 [=34] =] 和 getter 方法。

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

@property (nonatomic, assign) BTFormFieldSetting cardholderNameSetting;

通常这样做时,会使用 BTDropInRequest.m 实现文件中的 @synthesize 来自动创建 setCardHolderNameSetting: 选择器,它允许您设置 属性 值

[BTDropInRequest setCardholderNameSetting:<Instance of BTFormFieldSetting>]

并创建一个 cardholderNameSetting 选择器,它允许获得 属性 值。 implementation file of BTDropInRequest 中没有这样做。如果是,您会看到:

@synthesize cardholderNameSetting;

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

与任何技术无关,而是需要解决与此相关的所有依赖关系,一旦我这样做,一切都开始工作