【问题标题】:Xamarin iOS binding, symbol not found in libraryXamarin iOS 绑定,在库中找不到符号
【发布时间】:2016-11-22 13:54:35
【问题描述】:

我的 Xamarin.iOS 项目需要一个草图/绘画控件,虽然我似乎找不到与 C# 兼容的控件,但我确实找到了一个用 Objective C 编写的好组件。https://github.com/acerbetti/ACEDrawingView

我之前做过 Xamarin 绑定,所以我希望这个过程会相当简单,但不幸的是,我在此过程中遇到了一些障碍。

我开始创建我的静态库并使用 ant 构建脚本制作 FAT 二进制文件以覆盖设备和模拟器:

我的ant脚本的sn-p

AceDrawingViewSDK.a: libAceDrawingView-i386.a libAceDrawingView-armv7.a   libAceDrawingView-armv7s.a libAceDrawingView-arm64.a xcrun -sdk iphoneos lipo -create -output $@ $^

接下来,我跑了

sharpie bind --sdk=iphoneos10.1 *.h

在头文件上获取我的 ApiDefinitions 和 Structs 和 Enum 文件。

我检查并删除了验证属性。 (他们看起来都很好。)但这就是我的其他一些问题的开始。

The type ACEDrawingLabelViewTransform' already contains a definition forTransform' (CS0102) (AceDrawingViewBinding). 

为了继续尝试并获得一些工作,我只是注释掉了这个参考。

然后我遇到了多个类似的问题:

The type or namespace name `IACEDrawingTool' could not be found. Are you missing an assembly reference? (CS0246) (AceDrawingViewBinding)

我认为它与此有关:

// @interface ACEDrawingPenTool : UIBezierPath 
[BaseType(typeof(UIBezierPath))]
interface ACEDrawingPenTool : IACEDrawingTool

还有这个:

// @protocol ACEDrawingTool 
[Protocol, Model]
[BaseType(typeof(NSObject))]
interface ACEDrawingTool

我试图通过使接口名称保持一致来解决这个问题(我尝试了 IACEDrawingTool 和 ACEDrawingTool。)这样做克服了这个错误并允许我编译

我的一个枚举出来了

[Native]
 public enum ACEDrawingMode : nuint
{
Scale,
OriginalSize
}

在这种情况下,我找不到如何处理 [Native] (所以再一次,为了测试,我删除了它。)我尝试使用从枚举中删除 nuint 并使用 uint。这两种方法似乎都可以解决错误。

因此,修复了这些错误后,我能够从绑定项目中生成 .dll 并将其添加到我的主项目中。

现在,我又遇到了 2 个问题。

如果我构建并部署到模拟器,我可以运行我的应用程序,直到我尝试从绑定中创建一个新的 ACEDrawingView 实例。我明白了:

Could not create an native instance of the type 'ACEDrawingView': the native class hasn't been loaded.
It is possible to ignore this condition by setting ObjCRuntime.Class.ThrowOnInitFailure to false.

如果我尝试构建并部署到我的手机,我会在构建阶段遇到不同的错误,这会阻止它在设备上启动:

MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingArrowTool. The symbol 'OBJC_CLASS$ACEDrawingArrowTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingDraggableTextTool. The symbol '_OBJC_CLASS$ACEDrawingDraggableTextTool' could not be found in any of the libraries or frameworks linked with your application.
MTOUCH: error MT5211: Native linking failed, undefined Objective-C class: ACEDrawingEllipseTool. The symbol '_OBJC_CLASS$_ACEDrawingEllipseTool' could not be found in any of the libraries or frameworks linked with your application.

...等等。

我尝试返回、重读和重做步骤,并尝试重用我之前成功绑定的一些脚本和设置,但没有成功。

有人对解决这些问题有什么建议吗?

【问题讨论】:

    标签: xamarin xamarin.ios objective-sharpie


    【解决方案1】:

    找不到类型或命名空间名称“IACEDrawingTool”。

    添加一个新接口,像这样interface IACEDrawingTool{ }

    公共枚举ACEDrawingMode : nuint

    nuint 更改为ulong

    【讨论】:

      猜你喜欢
      • 2016-02-19
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2012-12-22
      • 2021-11-10
      • 1970-01-01
      • 2018-08-02
      相关资源
      最近更新 更多