我有一个第 3 方 Obj-C 库(我已经为其编写了 MonoTouch 绑定),它通过函数中的参数返回数据(NSDictionary
感兴趣的人可以使用 ZBar iPhone SDK)UIImagePickerControllerDelegate
FinishedPickingMedia
我已经绑定了我希望存储在这个字典(ZBarSymbol
)中的实例的类。
正如我所料,MonoTouch 运行时在编组时不可能检查所有这些集合实例,并且我的 MonoTouch 代码只NSObject
在字典中看到一个实例(如果这个假设是错误的,它应该是一个ZBarSymbol
实例,有人可以让我知道)。
我尝试使用以下代码手动将NSObject
over 编组为 a :ZBarSymbol
public override void FinishedPickingMedia (UIImagePickerController picker, NSDictionary info)
{
var result = info[ZBarSDK.BarcodeResultsKey];
var symbol = result as ZBarSymbol;
if ( symbol != null )
{
// This never works obviously.
}
else
{
symbol = new ZBarSymbol(result.Handle);
Console.WriteLine("Data = " + symbol.Data);
}
}
采用指针的 ZBarSymbol 的构造函数工作正常。但是尝试访问任何成员(例如,该Data
属性会导致以下异常:
MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.
Name: NSInvalidArgumentException
Reason: -[ZBarSymbolSet data]: unrecognized selector sent to instance 0x8d2960
at ZBar.ZBarSymbol.get_Data () [0x00000] in <filename unknown>:0
at ZBarMonoTouchTest.ZBarMonoTouchTestViewController+BarcodeReaderCallback.FinishedPickingMedia (MonoTouch.UIKit.UIImagePickerController picker, MonoTouch.Foundation.NSDictionary info) [0x00197] in /Users/tyson/Projects/ZBarMonoTouchTest/ZBarMonoTouchTestViewController.cs:112
at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x00042] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:29
at ZBarMonoTouchTest.Application.Main (System.String[] args) [0x00000] in /Users/tyson/Projects/ZBarMonoTouchTest/Main.cs:17
那么是否可以在应用程序代码中编组这些类?如果是这样,怎么做?或者更好的是,如果有人可以告诉我如何设置绑定,以便自动发生(但我不确定这是否可能)。