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% 確信が持てません。
ただし、これらのバインディングの最新バージョンは (サンプル アプリと共に)、https://github.com/Its-Tyson/MonoTouch.ZBarの github でホストされています。

「libzbar.a」は、ラップされている実際の iPhone ZBar SDK ライブラリです。最新バージョンはhttp://zbar.sourceforge.net/iphone/から入手できます(ただし、かなり前から v1.2 でした。V1 バインディング内に圧縮されたバージョンは、まさに同じなので、それがあなたの問題の原因であるとは思えません。)

于 2013-04-15T04:57:21.413 に答える