मैं एआरसी उपयोग कर रहा हूँ और iOS6 पर मैं एक अजीब दुर्घटना मिल someties बुला: gdb दूरदराज के एक त्रुटि दिखाई: E08gdb दूरदराज के एक त्रुटि दिखाई: E08 जब पूरा होने के ब्लॉक (EXC_BAD_ACCESS)
स्टैकट्रेस विधि से पहले में एक लाइन पर है जो एक समापन ब्लॉक कहते हैं। मैं ब्लॉक और एआरसी बारे में बहुत कुछ पढ़ा है, लेकिन मैं अभी भी विश्वास है जब उन्हें 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 भी है। मेरा पूरा होने से ब्लॉक को स्वचालित रूप से कॉपी किया जाना चाहिए क्योंकि इसे ब्लॉक के भीतर से संदर्भित किया गया है।
मुझे यहां क्या याद आ रही है? मैंने आईओएस 5 और 4.3 पर भी क्रैश देखा है, लेकिन जीडीबी रिमोट ने कभी भी त्रुटि नहीं दी: E08। उन मामलों में डीबगर से जानकारी भी सहायक नहीं थी। मैं PLWeakCompatibility का उपयोग कर रहा हूं ताकि मैं आईओएस 4.3
क्रैश शायद ब्लॉक निष्पादित कोड में है, तो आप उस कोड को क्यों पोस्ट नहीं करते? – Ecarrion
ने इस जानकारी को शामिल करने के लिए पोस्ट को संपादित किया – splinter
मुझे ऑब्जेक्ट की प्रतिलिपि करते समय यह त्रुटि सी ++ प्रोजेक्ट पर मिली ... अगर यह कोई मदद है। – Ross