微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

注册商无法在 xamarin iOS

如何解决注册商无法在 xamarin iOS

大家好,我正在研究与 WebView 相关的项目,到目前为止一切都很好。当我使用 WKNavigationDelegate 并使用模拟器构建时,它可以正常工作,但是当我尝试使用真实设备构建时,它给了我一个错误,我无法发布我的应用程序。 任何帮助将不胜感激谢谢。

  1. 错误 MT4136:注册商无法封送参数“?”的参数类型“System.Action`2”在方法“WebKit.IWKNavigationDelegate”中。 (MT4136) (midssamIOSXamarin)

  2. 错误 MT4136:注册商无法封送参数“?”的参数类型“System.Action`2”在方法“WebKit.IWKNavigationDelegate”中。 (MT4136) (midssamIOSXamarin)

    enter image description here

namespace midssamIOSXamarin
{
   public partial class ViewController : UIViewController
   {
     public ViewController (IntPtr handle) : base (handle)
     {
     }

     public override void ViewDidLoad ()
     {
         base.ViewDidLoad ();

         var configuration = new WKWebViewConfiguration();
         var controller = new WKUserContentController();
         configuration.UserContentController = controller;

         var webView = new WKWebView(View.Frame,configuration);
         webView.UIDelegate = new JavascriptUIDelegate();
         webView.NavigationDelegate = new JavascriptNavigationDelegate();
         this.View.AddSubview(webView);
         
          webView.LoadRequest(new NSUrlRequest("test url"));      
      }
   }

   public class JavascriptUIDelegate : WKUIDelegate
   { 
    public JavascriptUIDelegate()
    {
         
    }

    public override void RunJavaScriptAlertPanel(WKWebView webView,string message,WKFrameInfo frame,Action completionHandler)
    {
        var alert = UIAlertController.Create("",message,UIAlertControllerStyle.Alert);
        alert.AddAction(UIAlertAction.Create("확인",UIAlertActionStyle.Default,null));

        var rootVC = UIApplication.SharedApplication.Windows[0].RootViewController;
        rootVC.PresentViewController(alert,true,completionHandler);
    }

    public override void RunJavaScriptConfirmPanel(WKWebView webView,Action<bool> completionHandler)
    {
        var alert = UIAlertController.Create("",action => completionHandler(true)));
        alert.AddAction(UIAlertAction.Create("취소",UIAlertActionStyle.Cancel,action => completionHandler(false)));

        var rootVC = UIApplication.SharedApplication.Windows[0].RootViewController;
        rootVC.PresentViewController(alert,null);
    }
  }

  public class JavascriptNavigationDelegate : WKNavigationDelegate
  { 
    public override void DecidePolicy(WKWebView webView,WKNavigationAction navigationAction,Action<WKNavigationActionPolicy> decisionHandler)
    {
        decisionHandler(WKNavigationActionPolicy.Allow);
    }
    public override void DidFailNavigation(WKWebView webView,WKNavigation navigation,NSError error)
    { 
    }
    public override void DidFailProvisionalNavigation(WKWebView webView,NSError error)
    { 
    }
    public override void DidStartProvisionalNavigation(WKWebView webView,WKNavigation navigation)
    {  
    }
    public override void DidFinishNavigation(WKWebView webView,WKNavigation navigation)
    { 
    }

    public override void DidCommitNavigation(WKWebView webView,WKNavigation navigation)
    {  
    }
  }    
}

解决方法

我也是使用 xamarin 的开发人员。 当我尝试实现示例 WebView 应用程序时,我遇到了同样的错误。 处理它的最有效方法是启用 Mono 解释器。

  1. 在解决方案资源管理器中单击项目名称以打开 项目选项
  2. 打开“iOS 版本”标签
  3. 勾选“启用 Mono 解释器”

就我而言,上述方法解决了问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。