在 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

时间: 2024-10-07 03:38:38

在 ZBarSDK 中使用Block回调传值 Block在扫描成功后 变为空的相关文章

Block回调和传值(干货)

如果你还在苦恼block的传值和回调,不妨看看这个Demo,自己整理的,希望对大家有帮助,这是下载地址 https://github.com/ShaoWenLe/BlockTestByValueAndCall-back.git 用的是storyboard结合Xib,如果看着不习惯,可以从上面链接下载源码 //第一界面 // ViewController.h // BlockTestByValueAndCall-back // // Created by 出神入化 on 15/8/15. // C

iOS中什么是BLOCK回调函数

1.回调函数类似通知.委托 2.回调函数声明.实现.回调可以在都一个类中,也可以把回调写到别的类中 3.在A类中声明函数,在实现函数中,达到满足的条件,回调,在B类中的回调函数会被调用,并去处理满足条件的事情 比如下载,如果下载完成,就触发回调函数,通知B类中的回调函数,传递一个下载完成的参数,B类的回调函数会根据参数       执行相应的代码,如果成功怎么样怎么样,如果失败怎么样怎么样,B类在A类下载过程中完全可以做他自己的事情. 4.例子(伪代码): A类a.h中声明 -(void)dow

代理和block反向传值

代理传值: // SendViewController.h #import <UIKit/UIKit.h> @protocol SendInFor <NSObject> -(void)sendInForIdea:(NSString*)text; @end @protocol SendInForTwo <NSObject> -(void)sender:(NSString*)text; @end @interface SendViewController : UIViewC

属性传值 Block传值

属性传值 就是将A页面的数据传到B页面上,下面就是将FirstViewController的TextField的内容传递到SecondViewController页面的导航栏标题和控制台输出上 #import @interface FirstViewController :UIViewController { UITextField *tf; } @end #import "FirstViewController.h" #import "SecondViewControlle

OC3大回调模式使用总结(三)block回调

OC 3大回调模式使用总结(三)block回调 block 又称 代码块,闭包等 是一个匿名的函数,它可以当做一个对象来使用,只不过这个对象很特殊,是一段代码,他可以保存你写的一段预备性质代码,待某个不确定的事件发生时再调用;事件发生时,它可能会给你传递一些状态参数(回传),来方便你的使用 block常用类型(可以看做一个匿名函数的类型): typedef int(^Add)(int,int);//定义一个block类型 typedef void(^Logg)(NSString *);//有一个

iOS 页面间传值 之 单例传值 , block 传值

ios 页面间传值有许多,前边已经分享过属性传值和代理传值,今天主要说一下单例传值和 block 传值 单例传值:单例模式一种常用的开发的模式,单例因为在整个程序中无论在何时初始化对象,获取到的都是同一个对象,对象的属性相同,所以可以用来传值. block 传值 与 代理传值相似,主要用于第二个页面向第一个页面传值,block 传值具体步骤: 在第二个页面: 1.声明: block typedef void(^SendMessagerBlock) (NSString *str); 2.创建方法:

bLock 回调 就是这么简单!

转载自:http://blog.csdn.net/mobanchengshuang/article/details/11751671 我们在开发中常常会用到函数回调,你可以用通知来替代回调,但是大多数时候回调是比通知方便的,所以何乐而不为呢?如果你不知道回调使用的场景,我们来假设一下: 1.我现在玩手机 2.突然手机没有电了 3.我只好让手机开始充电 4.充电的过程中我好无聊,我要去看电视,但是我不会一直看电视,我要等手机电充满了停止看电视,继续去玩手机 5.我开始看电视 6.手机电充好了,我听

block 页面传值小结

我以自己项目中的一个模块为例,首先有两个页面,第一个页面为显示城市页面,第二个页面为选择要使用block传的值(城市名). 第一个页面中的显示控件: //自定义左部定位视图 self.locView = [[LocationView alloc] initWithFrame:CGRectMake(0, 0, SCREENWIDTH/2-35, 25)]; self.locView.imgView.image = [UIImage imageNamed:@"around"]; UITap

iOS开发-Block回调

关于Block之前有一篇文章已经写过一篇文章Object-C-代码块Block回顾,不过写的比较浅显,不能体现出Block在实际开发中的重要性,关于Block的基础知识,可以参考之前的博客.在实际开发中Block在回调过程中的是非常适合开发使用,不管是苹果的官方的接口还是一些第三方库的接口中都用到了Block回调.很多情况下Block和GCD一起使用,最常见的场景的就是App去后台取数据的过程中是需要时间,数据取成功之后我们才能更新UI页面,这就是最常见的回调的方式,也可以通过Notificat