界面中模拟 点button 异步请求 再block回调中 拿到请求数据 赋给上面的lable 模拟刷新UI
代码: 点击事件中
- (IBAction)Request:(id)sender { block_Interface *bi=[[block_Interface alloc] init]; __block ViewController *mySelf=self; [bi getdate:self block:^(id data){ NSLog(@"%@",@"拿到数据 异步刷新界面"); NSLog(@"回调拿到的数据>>>>>>>>>%@",data); if (data) { NSLog(@"回调拿到的数据>>>>>>>>>%@",data); //下面只要一操作 slef的成员 就蹦了 dispatch_async(dispatch_get_main_queue(), ^(void){ if([NSThread isMainThread]) NSLog(@"当前再主线程下....."); mySelf.lable.text=(NSString *)data; //mySelf.t=@"测试,block里能访问到self 的属性 并赋值"; }); } NSLog(@"完成"); }]; }
我再 dispatch_async(dispatch_get_main_queue(), ^(void){
[NSThread isMainThread]
判断是否是再主线程下里面只要一操作 myself的成员 就崩了...请各位 指正下...(数剧可以再 block回调中得到,也能打印,只要我一操作myself 或它的成员lable 赋值或取值 都会报错....)
错误信息:
遇到同样的问题,请问楼主有没有解决?
已解决:
原因是我在 .h文件中声明block变量时
@property(nomaric,assign)定义的block类型 变量名;
中你可以看到我用了assign,导致我在调用的可能已经被释放掉。
你可以查查在使用block做属性申明时,。最好使用copy 但使用retain也是可以的。。
希望能帮到你
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。