我正在尝试为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来忽略此条件。
答案 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
无关。