1

我正在使用从sourceforge 上下载的 ZBarMonotouchBinding v2 。这个版本没有附带 libzbar.a 文件,所以我使用的是绑定 v1 中的 libzbar.a 文件(这可能是我的问题的根源??)。下载绑定后,我编译并添加了 ZBar.dll 引用到我的示例应用程序。

对于我的示例应用程序中的委托,我使用的是在 stackoverflow 上找到的代码。

示例应用程序在显示扫描仪并让它识别条形码时没有问题,但是一旦它识别出条形码并想要将符号数据返回给代理,我就会得到这个异常,而不是让它调用 FinishedPickingMedia 事件在代表中:

Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: -[ZBar.ZBarReaderViewController+_ZBarReaderDelegate imagePickerController:didFinishPickingMediaWithInfo:]: unrecognized selector sent to instance 
0xe2a130

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: -[ZBar.ZBarReaderViewController+_ZBarReaderDelegate imagePickerController:didFinishPickingMediaWithInfo:]: unrecognized selector sent to instance 0xe2a130
  at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
  at MonoTouch.UIKit.UIApplication.Main (System.String[] args) [0x00000] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:43
  at Scanner.Application.Main (System.String[] args) [0x00000] in /Users/user/Projects/sample/scanner/Main.cs:16

似乎它没有找到 FinishedPickingMedia 事件,但由于它是据说可以工作的借用代码,我认为这不是编码问题。以防万一这是我正在使用的源代码:

控制器:

public class ScannerViewController : ZBarReaderViewController
    {
        public ScannerViewController ()
        {
            this.SupportedOrientations = ZBarOrientation.All;
            this.ShowBarcodeTracker = true;
            this.ShowsZBarControls = true;
            this.ReaderDelegate = new zScannerDelegate();
        }

}

代表:

public class zScannerDelegate : ZBarReaderDelegate
    {
        public delegate void ScanResult(string scanstrring);
        public event ScanResult ScannedCode;
        public zScannerDelegate ()
        {
        }
        public override void FinishedPickingMedia (UIImagePickerController picker, NSDictionary info)
        {

            ZBarSymbolSet result = null;

            string retstr = string.Empty;
            foreach (var sresult in info.Values) {
                if (sresult is ZBarSymbolSet) {
                    result = sresult as ZBarSymbolSet;
                    break;
                }
            }
            if (result != null) {
                foreach (var itema in result) {
                    Console.WriteLine (itema.Data);
                    retstr = itema.Data;
                    ScanResult ret = ScannedCode;
                    if (ret != null)
                        ret(retstr);
                }
            }
        }

    }

可能是我不得不从导致问题的绑定的 v1 借用的 libzar.a 文件吗?知道在哪里可以获得 libzar.a 文件的更新版本,或者我可以做些什么来尝试解决这个错误?

我已经研究了一整天,但不幸的是,没有很多代码示例可供 ZBar 和 Monotouch 参考。

4

1 回答 1

0

我不是 100% 确定你的代码有什么问题,对我来说看起来不错。
但是这些绑定的最新版本(以及示例应用程序)现在托管在 github 上,地址为https://github.com/Its-Tyson/MonoTouch.ZBar

`libzbar.a' 是被包装的实际 iPhone ZBar SDK 库。您可以从http://zbar.sourceforge.net/iphone/获得最新版本(尽管它已经在 v1.2 上使用了很长一段时间,我相信您在 V1 绑定中获得的压缩版本将完全是一样,所以我怀疑这是你问题的根源。)

于 2013-04-15T04:57:21.413 回答