【问题标题】:Swift framework on Xamarin.iOS - Foundation.MonoTouchException has been thrownXamarin.iOS 上的 Swift 框架 - Foundation.MonoTouchException 已被抛出
【发布时间】:2019-07-10 07:17:59
【问题描述】:

Xamarin iOS 应用在运行 swift 框架时崩溃。

在我的 .framework - Swift 类中

import Foundation

@objc(Member)
open class Member: NSObject {

    @objc
    func getMemberID() -> String {
        return "Hii, This is member code .framework"
    }
}

我已经为 simulator iPhone7 构建了一个框架,并在 Visual Studio Xamarin.iOS

上添加了 Native 框架

我已经为接口类手动编码。

using System;

using ObjCRuntime;
using Foundation;
using UIKit;

namespace CustomLibrary {

    [BaseType(typeof(NSObject))]
    interface Member
    {
        [Export("getMemberID")]
        string MemberID { get; }
    }
}

之后,我将 Binding 库的引用添加到 iOS App 项目。

在 ViewController 中我导入了一个 绑定库 并分配了一个类并在日志中打印。

using System;
using UIKit;
using CustomLibrary;

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

        public override void ViewDidLoad()
        {
            base.ViewDidLoad();
            // Perform any additional setup after loading the view, typically from a nib.

            Member memberObj = new Member();
            System.Diagnostics.Debug.Print(memberObj.MemberID());
        }

        public override void DidReceiveMemoryWarning()
        {
            base.DidReceiveMemoryWarning();
            // Release any cached data, images, etc that aren't in use.
        }
    }
}

当我建立一个项目时。它显示了

错误 0 和警告 1

之后当我运行一个项目时。应用程序在模拟器中启动并崩溃并出现以下错误。

【问题讨论】:

  • 你应该在成员接口中实现getmemberID()。查看stacktrace,项目中找不到getmemberID()。
  • 在我的项目中我已经实现了 getmemberID() 请检查问题代码
  • swift 中的 getmemberID() 是一种方法,您将其转换为 Xamarin.iOS 中的属性。您也应该将其绑定为方法。见这里:binding-methods
  • 它对你有用吗?
  • 那么,您能否将其标记为答案,以便我们可以帮助更多有同样问题的人。如果您在 Xamarin.iOS 应用程序上从 .framework 呈现 ViewController 时遇到问题,您可以打开一个新线程并在那里添加您的代码,我们将为您提供支持。

标签: c# swift binding xamarin.ios


【解决方案1】:

我的意思是在你的Member 界面中,应该是这样的:

[BaseType(typeof(NSObject))]
interface Member
{
    [Export("getMemberID")]
    string GetMemberID ();
}

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 2020-08-20
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多