绑定ObjectiveC库时MonoTouch问题

时间:2014-01-02 16:52:23

标签: objective-c xamarin.ios

我正在尝试为Vfr PDF阅读器进行绑定:https://github.com/vfr/Reader 这是一个ObjectiveC应用程序。

我跟着Xamarin的演练:http://docs.xamarin.com/guides/ios/advanced_topics/binding_objective-c/binding_walkthrough/

不幸的是,我仍在努力解决一个问题。在我的AppDelegate中,我实例化了一个ReaderDemoController,它来自Vfr Reader库,但是当在设备(iPhone5)上运行时,它一直说:

Wrapper type 'Hager.VfrReaderCoreBinding.ReaderDemoController' is missing its native ObjectiveC class 'ReaderDemoController'.

这很奇怪,因为Fat库包含i386,armv7,armv7s和arm64库(使用lipo完成)。这是LinkWith文件内容:

[assembly: LinkWith ("libVfrReaderCoreNative.a", LinkTarget.Simulator | LinkTarget.ArmV7 | LinkTarget.ArmV7s, ForceLoad = true)]

在ApiDefinition文件中,这是ReaderController接口:

[BaseType (typeof (UIViewController))]
public interface ReaderDemoController {
}

没有什么真正“复杂”。什么可能是原因的任何想法? 这是绑定解决方案:solution zipped

这在模拟器中也不起作用。我明白了:

Could not create an native instance of the type 'Hager.VfrReaderCoreBinding.ReaderDemoController': the native class hasn't been loaded.

可以通过将MonoTouch.ObjCRuntime.Class.ThrowOnInitFailure设置为false来忽略此条件。

1 个答案:

答案 0 :(得分:2)

看起来Objective-C库没有正确构建,如果你在它上面运行nm,你会发现它几乎是空的:

$ nm libVfrReaderCoreNative.a

libVfrReaderCoreNative.a(VfrReaderCoreNative.o):
0000000000000000 s L_OBJC_CLASS_NAME_
                 U _OBJC_CLASS_$_NSObject
00000000000000d0 S _OBJC_CLASS_$_VfrReaderCoreNative
                 U _OBJC_METACLASS_$_NSObject
00000000000000a8 S _OBJC_METACLASS_$_VfrReaderCoreNative
                 U __objc_empty_cache
                 U __objc_empty_vtable
0000000000000060 s l_OBJC_CLASS_RO_$_VfrReaderCoreNative
0000000000000018 s l_OBJC_METACLASS_RO_$_VfrReaderCoreNative

特别是与ReaderDemoController无关。