Ошибка ZBarMonotouchBinding при возврате символьных данных
Я использую v2 ZBarMonotouchBinding, который я скачал отсюда на sourceforge. Эта версия не поставляется с файлом libzbar.a, поэтому я использую файл libzbar.a из v1 привязки (который может быть источником моей проблемы??). После загрузки привязки я скомпилировал и добавил ссылку на ZBar.dll в пример приложения.
Для делегата в моем примере приложения я использую код, который я нашел здесь в stackru.
В примере приложения не возникает проблем с отображением сканера и его распознаванием штрих-кода, но как только он распознает штрих-код и хочет вернуть данные символа делегату, я получаю это исключение вместо того, чтобы вызывать событие 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.
1 ответ
Я не уверен на 100%, что конкретно не так с вашим кодом, для меня это выглядит нормально.
Но последняя версия этих привязок (вместе с примером приложения) теперь размещена на github по адресу https://github.com/Its-Tyson/MonoTouch.ZBar
`Libzbar.a'- это фактически упакованная библиотека iPhone ZBar SDK. Вы можете получить последнюю версию с http://zbar.sourceforge.net/iphone/ (хотя она была на v1.2 уже довольно давно, и я верю, что полученная вами версия, заархивированная в привязках V1, будет именно То же самое, поэтому я сомневаюсь, что это источник ваших проблем.)