Получение исключения аргумента NSinvalid при использовании собственной библиотеки привязки для xamarin

Итак, я пытался создать Native Binding, который можно использовать в Xamarin Forms, так что все в порядке, но есть один случай, когда я добавляю новый

Возникло исключение Objective-C. Имя: NSInvalidArgumentException Причина: -[BTDropInRequest setCardholderNameSetting:]: нераспознанный селектор отправлен экземпляру

Это мой класс ApiDefinition

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

И я определил BTFormFieldSetting в Structs как

 [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>

Я включил Native Framework для библиотеки привязки, и если я не использую этот фрагмент кода, он отлично работает. Любые входные данные будут глубоко оценены.


person Venky    schedule 28.11.2018    source источник


Ответы (2)


Вы привязываетесь к свойству target-C BTDropInRequest, которое не @synthesize свойство, поэтому оно не генерирует методы установки и получения.

IOW, вот исходник Obj-C в BTDropInRequest.h:

@property (nonatomic, assign) BTFormFieldSetting cardholderNameSetting;

Обычно при этом можно использовать @synthesize в файле реализации BTDropInRequest.m для автоматического создания селектора setCardHolderNameSetting:, который позволяет вам установить значение свойства с помощью

[BTDropInRequest setCardholderNameSetting:<Instance of BTFormFieldSetting>]

а также создать селектор cardholderNameSetting, который позволяет получить значение свойства. Это не делается в файле реализации из BTDropInRequest. Если бы это было так, вы бы увидели:

@synthesize cardholderNameSetting;

но его там нет, отсюда и ошибка отсутствующего селектора. Не знаю, как это исправить, не меняя исходный код Obj-C.

person jgoldberger - MSFT    schedule 28.11.2018
comment
Я не очень хорошо разбираюсь в obj-c, так что поправьте меня, если я ошибаюсь, но библиотека obj-c, похоже, отлично работает на iOS Native. - person Venky; 29.11.2018
comment
Мне нужно посмотреть, как библиотека используется в проекте Obj-C и как она используется в Xam.iOS. Я бы предложил открыть бесплатную поддержку по электронной почте 1 на 1 со службой поддержки MS Xamarin (я являюсь членом этой команды). Таким образом, мы можем в частном порядке обмениваться информацией, кодом и т. д. Вы можете создать бесплатную заявку на поддержку Xamarin здесь: support.microsoft.com/en-us/ - person jgoldberger - MSFT; 29.11.2018
comment
Привет, удалось это исправить, описанный выше метод имел много зависимостей в других библиотеках, которые я включил, и он начал работать - person Venky; 30.11.2018
comment
Ага, это бы сработало. :-) - person jgoldberger - MSFT; 01.12.2018

Не было связано ни с чем техническим, а скорее нуждалось в разрешении всех зависимостей, связанных с этим, как только я это сделал, все заработало.

person Venky    schedule 12.12.2018