Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 无法注册成员的选择器,因为该选择器已在其他成员上注册_Objective C_Xamarin.forms_Xamarin.ios_Objective Sharpie - Fatal编程技术网

Objective c 无法注册成员的选择器,因为该选择器已在其他成员上注册

Objective c 无法注册成员的选择器,因为该选择器已在其他成员上注册,objective-c,xamarin.forms,xamarin.ios,objective-sharpie,Objective C,Xamarin.forms,Xamarin.ios,Objective Sharpie,目前,我正在尝试为Xamarin.iOS项目绑定Qualtrics库,我做到了,但是当我运行该项目时,应用程序崩溃了,它说 错误:“无法注册选择器 成员的“userContentController:didReceiveScriptMessage:” 'QualtricsIos.QualtricsSurveyViewController.UserContentController' 因为选择器已在成员上注册 “DidReceiveScriptMessage” 无法注册成员的选择器“initWit

目前,我正在尝试为Xamarin.iOS项目绑定Qualtrics库,我做到了,但是当我运行该项目时,应用程序崩溃了,它说

错误:“无法注册选择器 成员的“userContentController:didReceiveScriptMessage:” 'QualtricsIos.QualtricsSurveyViewController.UserContentController' 因为选择器已在成员上注册 “DidReceiveScriptMessage”

无法注册成员的选择器“initWithCoder:” “QualtricsIos.QualtricsSurveyViewController..ctor”因为 选择器已在成员“ConstructorCoder”上注册

我尝试过类似的解决方案,但到目前为止运气不佳。我检查了ApiDefinitionsStructsAndEnums,也没有找到根本原因。有人能告诉我出了什么问题吗

ApiDefinitions文件:

namespace QualtricsLib
{
    // @interface InitializationResult : NSObject
    [BaseType(typeof(NSObject))]
    [Protocol]
    [DisableDefaultCtor]
    interface InitializationResult
    {
        // -(NSString * _Nullable)getMessage __attribute__((warn_unused_result));
        [NullAllowed, Export("getMessage")]

        string Message { get; }

        // -(BOOL)passed __attribute__((warn_unused_result));
        [Export("passed")]

        bool Passed { get; }
    }

// @interface Properties : NSObject
[BaseType(typeof(NSObject))]
[Protocol]
interface Properties
{
    // -(void)setStringWithString:(NSString * _Nonnull)string for:(NSString * _Nonnull)key;
    [Export("setStringWithString:for:")]
    void SetStringWithString(string @string, string key);

    // -(void)setNumberWithNumber:(double)number for:(NSString * _Nonnull)key;
    [Export("setNumberWithNumber:for:")]
    void SetNumberWithNumber(double number, string key);

    // -(void)setDateTimeFor:(NSString * _Nonnull)key;
    [Export("setDateTimeFor:")]
    void SetDateTimeFor(string key);
}

// @interface Qualtrics : NSObject
[BaseType(typeof(NSObject))]
[Protocol]
[DisableDefaultCtor]
interface Qualtrics
{
    // @property (readonly, nonatomic, strong, class) Qualtrics * _Nonnull shared;
    [Static]
    [Export("shared", ArgumentSemantic.Strong)]
    Qualtrics Shared { get; }

    // @property (readonly, nonatomic, strong) Properties * _Nonnull properties;
    [Export("properties", ArgumentSemantic.Strong)]
    Properties Properties { get; }

    // -(void)initializeWithBrandId:(NSString * _Nonnull)brandId zoneId:(NSString * _Nonnull)zoneId interceptId:(NSString * _Nonnull)interceptId completion:(void (^ _Nullable)(InitializationResult * _Nonnull))completion;
    [Export("initializeWithBrandId:zoneId:interceptId:completion:")]
    void InitializeWithBrandId(string brandId, string zoneId, string interceptId, [NullAllowed] Action<InitializationResult> completion);

    //-(void) evaluateTargetingLogicWithCompletion:(void (^ _Nonnull)(TargetingResult* _Nonnull))completion;
    [Export("evaluateTargetingLogicWithCompletion:")]
    void EvaluateTargetingLogicWithCompletion(Action<TargetingResultNew> completion);

    // -(BOOL)handleLocalNotificationWithResponse:(UNNotificationResponse * _Nonnull)response displayOn:(UIViewController * _Nonnull)viewController __attribute__((availability(ios, introduced=10.0))) __attribute__((warn_unused_result));
    //[iOS(10, 0)]
    [Export("handleLocalNotificationWithResponse:displayOn:")]
    bool HandleLocalNotificationWithResponse(UNNotificationResponse response, UIViewController viewController);

    // -(BOOL)handleLocalNotification:(UILocalNotification * _Nonnull)notification displayOn:(UIViewController * _Nonnull)viewController __attribute__((warn_unused_result));
    [Export("handleLocalNotification:displayOn:")]
    bool HandleLocalNotification(UILocalNotification notification, UIViewController viewController);

    // -(BOOL)displayWithViewController:(UIViewController * _Nonnull)viewController __attribute__((warn_unused_result));
    [Export("displayWithViewController:")]
    bool DisplayWithViewController(UIViewController viewController);

    // -(void)displayTargetWithTargetViewController:(UIViewController * _Nonnull)targetViewController targetUrl:(NSString * _Nonnull)targetUrl;
    [Export("displayTargetWithTargetViewController:targetUrl:")]
    void DisplayTargetWithTargetViewController(UIViewController targetViewController, string targetUrl);

    // -(BOOL)hide __attribute__((warn_unused_result));
    [Export("hide")]
    bool Hide { get; }

    // -(void)registerViewVisitWithViewName:(NSString * _Nonnull)viewName;
    [Export("registerViewVisitWithViewName:")]
    void RegisterViewVisitWithViewName(string viewName);

    // -(void)resetTimer;
    [Export("resetTimer")]
    void ResetTimer();

    // -(void)resetViewCounter;
    [Export("resetViewCounter")]
    void ResetViewCounter();
}

//@interface QualtricsSurveyViewController : UIViewController<WKScriptMessageHandler>
[BaseType(typeof(UIViewController))]
[Protocol]
[DisableDefaultCtor]
interface QualtricsSurveyViewController : IWKScriptMessageHandler
{
    // -(instancetype _Nonnull)initWithUrl:(NSString * _Nonnull)url __attribute__((objc_designated_initializer));
    [Export("initWithUrl:")]
    [DesignatedInitializer]
    IntPtr Constructor(string url);

    // -(instancetype _Nullable)initWithCoder:(NSCoder * _Nonnull)aDecoder __attribute__((objc_designated_initializer));

    [Export("initWithCoder:")]
    [DesignatedInitializer]
    //[Static]
    IntPtr ConstructorCoder(NSCoder aDecoder);

    // -(void)viewDidAppear:(BOOL)animated;
    [Export("viewDidAppear:")]
    void ViewDidAppear(bool animated);

    // -(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator> _Nonnull)coordinator;
    [Export("viewWillTransitionToSize:withTransitionCoordinator:")]
    void ViewWillTransitionToSize(CGSize size, IUIViewControllerTransitionCoordinator coordinator);

    // -(void)userContentController:(WKUserContentController * _Nonnull)userContentController didReceiveScriptMessage:(WKScriptMessage * _Nonnull)message;
    [Export("userContentController:didReceiveScriptMessage:")]
    //[Static]
    void UserContentController(WKUserContentController userContentController, WKScriptMessage message);
}

// @interface TargetingResult : NSObject
[BaseType(typeof(NSObject))]
[Protocol]
[DisableDefaultCtor]
interface TargetingResultNew
{
    // -(NSString * _Nullable)getSurveyUrl __attribute__((warn_unused_result));
    [NullAllowed, Export("getSurveyUrl")]

    string SurveyUrl { get; }

    // -(enum targetingResultStatus)getTargetingResult __attribute__((warn_unused_result));
    [Export("getTargetingResult")]

    TargetingResultStatus TargetingResult { get; }

    // -(BOOL)passed __attribute__((warn_unused_result));
    [Export("passed")]

    bool Passed { get; }

    // -(TargetingResultError * _Nullable)getError __attribute__((warn_unused_result));
    [NullAllowed, Export("getError")]

    TargetingResultError Error { get; }

    // -(void)recordImpression;
    [Export("recordImpression")]
    void RecordImpression();

    // -(void)recordClick;
    [Export("recordClick")]
    void RecordClick();
}

// @interface TargetingResultError : NSObject
[BaseType(typeof(NSObject))]
[Protocol]
[DisableDefaultCtor]
interface TargetingResultError
{
}

}
namespace QualtricsLib
{
    [Native]
    public enum TargetingResultStatus : long
    {
        Passed = 0,
        FailedLogic = 1,
        SampledOut = 2,
        MultipleDisplayPrevented = 3,
        Error = 4
    }
}

我通过删除initWithCoder方法QualtricsSurveyViewController并删除继承来修复该问题。此选项修复了选择器问题,但在运行应用程序时会将未设置的对象引用抛出到对象的实例异常

我查看了头文件,在头文件中找到了SWIFT\u类名称,如

SWIFT_CLASS("_TtC9Qualtrics29QualtricsSurveyViewController")
因此,我对ApiDefinitions文件应用了相同的内容

[BaseType(typeof(UIViewController), Name = "_TtC9Qualtrics29QualtricsSurveyViewController")]
还有宾果!!它正在工作


此解决方案已修复我的所有问题,并且绑定库正在成功运行。

我将从绑定库中删除bin/obj文件夹。请在APIdefination文件中进行上述编辑,而不是在ViewController中进行编辑-因为ViewController已生成且不应编辑。然后清除/重新生成新生成的ViewController