• 在 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

     

     

  • 相关阅读:
    【Python】错误、调试和测试
    【c++ primer, 5e】函数指针
    【英语学习】【17/4/1】
    【c++ primer, 5e】函数匹配
    FIRST GAME.
    【Thinking in Java, 4e】访问权限控制
    【c++ primer, 5e】特殊用途语言特性
    Top-Down笔记 #01# 计算机网络概述
    NHibernate之映射文件配置说明
    Web Service 部署到IIS服务器
  • 原文地址:https://www.cnblogs.com/designyshy/p/4913763.html
Copyright © 2020-2023  润新知