内容简介:翻译自:https://stackoverflow.com/questions/12809343/gdb-remote-returned-an-error-e08-when-calling-completion-block-exc-bad-access
我正在使用ARC,而在iOS6上我有些奇怪的崩溃:
gdb remote返回错误:E08
在堆栈跟踪中,之前的方法位于调用完成块的行上.我阅读了很多关于块和ARC的内容,但是在使用它们时,我仍然没有信心:
(简化方法并遗漏了一些代码)
- (void) method1: (void(^)(NSMutableArray *a)) completionBlock withFailedBlock:(void(^)(NSInteger errorCode,NSString *error)) failedBlock { __weak Controller *weakSelf = self; ... if(condition) completionBlock(weakSelf.a); //still do method2, since we might get updated data [weakself.service method2:^(NSMutableArray *a2) { weakSelf.shouldRefresh = NO; ... completionBlock(a2); //<-- sometimes crashes here } withFailedBlock:^(NSInteger errorCode, NSString *error) { failedBlock(errorCode, error); }]; } withFailedBlock:^(NSInteger errorCode, NSString *error) { failedBlock(errorCode, error); }];
调用代码:
[[Controller sharedController] method1:^(NSMutableArray *a) { //save result in model (singleton) [Model sharedModel].a = a; [weakSelf refreshUI]; } withFailedBlock:^(NSInteger errorCode,NSString *error) { ;//show alert }];
当我检查它周围的块和值时,它们似乎没问题.我也有NSZombie.
我的completionBlock应该被自动复制,因为它是从块中引用的.
我在这里想念的是什么?
我也看过iOS5和4.3上的崩溃,但从来没有gdb远程返回错误:E08.调试器中的信息在这些情况下也没有帮助.我正在使用 PLWeakCompatibility ,以便我可以在iOS4.3下支持__weak
你还有这个问题吗?
在这种情况下,为什么你需要weakSelf.在这种情况下,你看起来并不像是在捕捉自我.你把它留下来时代码是否仍会崩溃?
顺便说一句,我认为当你试图为你的问题简化它时,你的method1实现有点乱.
- (void) method1: (void(^)(NSMutableArray *a)) completionBlock withFailedBlock:(void(^)(NSInteger errorCode,NSString *error)) failedBlock { ... } withFailedBlock:^(NSInteger errorCode, NSString *error) { ... }];
看起来不像是一个有效的方法实现.不应该是这样的:
- (void) method1: (void(^)(NSMutableArray *a)) completionBlock withFailedBlock:(void(^)(NSInteger errorCode,NSString *error)) failedBlock { ... }
翻译自:https://stackoverflow.com/questions/12809343/gdb-remote-returned-an-error-e08-when-calling-completion-block-exc-bad-access
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Windows 10:如何解决远程过程调用错误和问题
- php致命错误:调用未定义的方法TCPDF :: addTTFfont()in
- Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符
- 直观讲解-RPC调用和HTTP调用的区别
- 调用链系列一:解读UAVStack中的调用链技术
- 调用链系列二:解读UAVStack中的调用链技术
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。