• 在 ZBarSDK 中使用Block回调传值 Block在扫描成功后 变为空


    今天,使用ZbarSDk 实现二维码扫描的功能,使用block回调传递扫描成功的获取的值   但是在扫码成功后block 就变为空了.....心塞塞的

     代码如下  主页面跳转到扫码界面

        //跳转到扫码界面

        ReadCodeViewController * readVC = [[ReadCodeViewController alloc]init];

        readVC.scanCodeResult = ^(NSString *result)

        {

            [self addPcdMerch:result];

        };

           [self presentViewController:readVC animated:YES completion:nil];

    扫码成功后  代码如下

    -( void )readerView:( ZBarReaderView *)readerView didReadSymbols:( ZBarSymbolSet *)symbols fromImage:( UIImage *)image

     

    {

        [timer invalidate];

        [self.zBarReadView stop];

        _line.frame = CGRectMake(30, 10, 220, 2);

        

        const zbar_symbol_t *symbol = zbar_symbol_set_first_symbol (symbols. zbarSymbolSet );

        

        NSString *symbolStr = [ NSString stringWithUTF8String : zbar_symbol_get_data (symbol)];

     

        if(self.scanCodeResult)

        {

            self.scanCodeResult(symbolStr);

        }

     

        [self dismissViewControllerAnimated:YES completion:nil];

    }

    最后,发现问题出在对Block 进行申明的时候 

    @property (nonatomic, assign) ScanCodeResultBlock scanCodeResult;

    使用了assign,将其改为strong后就OK.  

    那么我们简单说下assign  strong/weak copy 的使用吧

    assign  基本数据类型

    strong/weak 各种控件

    copy   只用来赋值用的 如 NSString  

    最后,将在Block 申明时使用了copy

     

     

  • 相关阅读:
    Task的使用
    WinStore之Application Data
    WinStore控件之Button、HyperlinkButton、RadioButton、CheckBox、progressBar、ScrollViewer、Slider
    WinStore控件之TextBox
    WinStore控件之TextBlock
    WinStore控件之Button
    设计模式之单例模式
    WinStore开发知识导航集锦
    WindowsStore页面导航
    导出程序界面(UI)到图片
  • 原文地址:https://www.cnblogs.com/designyshy/p/4913763.html
Copyright © 2020-2023  润新知