1

私のアプリケーションでは、Zbar SDK スキャナーを統合しましたが、スキャン中は通常は正常に動作しますが、私の場合は、didfinishpickingmediawithInfo: デリゲート メソッドが 2 回起動することがあります。シングルトーンクラスにある私のコードは次のとおりです。

-(void)scanProductBarCode
{

        ZBarReaderViewController *reader = [ZBarReaderViewController new];
        reader.readerDelegate = self;


        if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
            reader.supportedOrientationsMask = ZBarOrientationMaskLandscape;
        else
            reader.supportedOrientationsMask = ZBarOrientationMaskPortrait;

        ZBarImageScanner *scanner = reader.scanner;
        [scanner setSymbology: ZBAR_UPCA config: ZBAR_CFG_ENABLE to: 1];
        [scanner setSymbology: ZBAR_CODE39 config: ZBAR_CFG_ADD_CHECK to: 0];


}

#pragma mark - Scanner delegate methods

- (void) imagePickerController: (UIImagePickerController*) reader didFinishPickingMediaWithInfo: (NSDictionary*) info
{
    id<NSFastEnumeration> results = [info objectForKey: ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results)
        break;

    barCodeString = [[NSString alloc] initWithString:symbol.data];

    if(self.delegate)
        [self.delegate getBarcodeString:barCodeString];

    [reader dismissModalViewControllerAnimated:YES];


}

このスクリーン ショットを参照してください。

ここに画像の説明を入力

バックグラウンドで、スキャナは 2 回発生した場合でもこのように実行されています。

4

2 に答える 2

3

私は同じ問題に遭遇しました。BOOLという名前のクラスにインスタンス変数を追加しました_processing。それから私はこれをしました:

- (void)imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo:(NSDictionary*)info
{
    if (_processing) return;

    id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];
    ZBarSymbol *symbol = nil;
    for(symbol in results) {
        _processing = YES;
        barCodeString = symbol.data;

        if(self.delegate) {
            [self.delegate getBarcodeString:barCodeString];
        }

        break;
    }

    [reader dismissModalViewControllerAnimated:YES];
}

これにより、最初の呼び出しのみが処理されるようになります。_processingビュー コントローラーを複数回再利用する場合は、リセットが必要になる場合があります。

于 2013-03-01T06:51:57.603 に答える
0

ZBarReaderViewController は連続モードで画像をスキャンするため、ZBarReaderViewController を閉じる前に画像が 2 回スキャンされる可能性があります。リーダー (ZBarReaderViewController *reader) をクラスのインスタンス変数にし、デリゲート メソッドで試してみてください。

- (void)imagePickerController:(UIImagePickerController*)reader didFinishPickingMediaWithInfo:(NSDictionary*)info
{
    // Stop further scanning
    [reader.readerView stop];
    ...
    //Continue with processing barcode data.
}
于 2013-03-02T12:19:38.913 に答える