8
我使用ARC和iOS6的我someties收到一條奇怪的崩潰: GDB遠程返回了一個錯誤:E08GDB遠程返回了一個錯誤:E08時調用完成塊(EXC_BAD_ACCESS)
在堆棧跟蹤前的方法在一個叫完成塊的行上。我讀了很多關於塊和ARC,但在folling環境中使用它們的時候我仍然不相信:
(簡化的方法和留下了一些代碼)
- (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
崩潰可能是在代碼塊執行,你爲什麼不張貼該代碼? – Ecarrion
編輯帖子以包含此信息 – splinter
複製對象時,我在C++項目上出現此錯誤......如果有任何幫助。 – Ross