我使用的是從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。