2013-02-12 52 views
1

我使用的是從here on sourceforge下載的ZBarMonotouchBinding的v2。這個版本沒有附帶一個libzbar.a文件,所以我使用了綁定版本v1(這可能是我的問題的來源)中的libzbar.a文件。在下載我編譯的綁定之後,將ZBar.dll引用添加到我的示例應用程序中。ZBarMonotouchBinding返回符號數據時出錯

對於我的示例應用程序中的代表,我使用的代碼是here on 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); 
       } 
      } 
     } 

    } 

難道是libzar.a文件,我不得不從V1借用導致問題的綁定?任何想法,我可以得到libzar.a文件的更新版本,或者我可以做些什麼來嘗試解決這個錯誤?

我已經研究了一整天,但不幸的是沒有太多的代碼示例要引用ZBar和Monotouch。

回答

0

我不是100%確定你的代碼有什麼問題,它對我來說看起來很好。
但最新版本的這些綁定的(有一個示例應用程序一起)現在在https://github.com/Its-Tyson/MonoTouch.ZBar

的`libzbar.a」是當前iPhone zbar和SDK庫被包裹託管在GitHub上。你可以從http://zbar.sourceforge.net/iphone/獲得最新版本(儘管它已經在v1.2上已經有很長一段時間了,我相信你獲得的V1版本壓縮在V1綁定中的版本將完全相同,所以我懷疑這是你的來源問題)。