2011-07-26 2 views
2

블록을 사용하고 싶습니다. 그러나 몇 번의 호출 후에 EXC_BAD_ACCESS가 발생합니다.블록을 사용하면 EXC_BAD_ACCESS가 발생합니다.

내 코드 : 나는 무엇을 놓치고

- (void) specificMethod { 
    if (waitingSendToBasketBlock != nil) { 
     waitingSendToBasketBlock(); // here, the EXC_BAD_ACCESS happens 
     waitingSendToBasketBlock = nil; 
    } 
} 

다음 웹 서비스가 완료되면

- (void) sendBasket { 
    if (currentSendToBasketBlock != nil) { 
    // there's already a webservice going... set the new one as waiting 
    waitingSendToBasketBlock =^{ 
     WebServicesModel *webServicesModel = [[[WebServicesModel alloc] init] autorelease]; 
     webServicesModel.delegate = self; 
     [webServicesModel sendBasketToServer:currentBasket]; 

     [self showBasketBackground]; 

    }; 
    [waitingSendToBasketBlock copy]; 
} else { 
    currentSendToBasketBlock =^{ 
     WebServicesModel *webServicesModel = [[[WebServicesModel alloc] init] autorelease]; 
     webServicesModel.delegate = self; 
     [webServicesModel sendBasketToServer:currentBasket]; 

     [self showBasketBackground]; 
    }; 

    [currentSendToBasketBlock copy]; 

    currentSendToBasketBlock(); 
} 
} 

,이 같은 객체의 특정 메소드를 호출? 악기가 좀비를 찾지 못했습니다 ...

고마워요!

편집 : 충돌 로그

Thread 0 name: Dispatch queue: com.apple.libdispatch-manager 
Thread 0: 
0 libsystem_kernel.dylib   0x35590fbc kevent + 24 
1 libdispatch.dylib    0x3525bed4 _dispatch_mgr_invoke + 744 
2 libdispatch.dylib    0x3525cf3a _dispatch_queue_invoke + 70 
3 libdispatch.dylib    0x3525c4ec _dispatch_worker_thread2 + 228 
4 libsystem_c.dylib    0x3566758a _pthread_wqthread + 258 
5 libsystem_c.dylib    0x35667bbc start_wqthread + 0 

Thread 1 name: WebThread 
Thread 1: 
0 libsystem_kernel.dylib   0x3558dc00 mach_msg_trap + 20 
1 libsystem_kernel.dylib   0x3558d758 mach_msg + 44 
2 CoreFoundation     0x309582b8 __CFRunLoopServiceMachPort + 88 
3 CoreFoundation     0x3095a562 __CFRunLoopRun + 350 
4 CoreFoundation     0x308eaebc CFRunLoopRunSpecific + 224 
5 CoreFoundation     0x308eadc4 CFRunLoopRunInMode + 52 
6 WebCore       0x35f5327e _ZL12RunWebThreadPv + 382 
7 libsystem_c.dylib    0x3566630a _pthread_start + 242 
8 libsystem_c.dylib    0x35667bb4 thread_start + 0 

Thread 2: 
0 libsystem_kernel.dylib   0x35591cb0 stat + 12 
1 CFNetwork      0x34cccf56 DiskCookieStorage::syncStorageLocked() + 422 
2 CFNetwork      0x34c3fa60 PrivateHTTPCookieStorage::syncStorage() + 20 
3 CFNetwork      0x34ccaa7e HTTPCookieStorage::syncStorage() + 6 
4 CFNetwork      0x34ccaa9c HTTPCookieStorage::_syncTimerFired(__CFRunLoopTimer*, void*) + 12 
5 CoreFoundation     0x30957a40 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8 
6 CoreFoundation     0x30959ec4 __CFRunLoopDoTimer + 844 
7 CoreFoundation     0x3095a83e __CFRunLoopRun + 1082 
8 CoreFoundation     0x308eaebc CFRunLoopRunSpecific + 224 
9 CoreFoundation     0x308eadc4 CFRunLoopRunInMode + 52 
10 Foundation      0x341dd7f6 +[NSURLConnection(NSURLConnectionReallyInternal) _resourceLoadLoop:] + 206 
11 Foundation      0x341d0382 -[NSThread main] + 38 
12 Foundation      0x342425c6 __NSThread__main__ + 966 
13 libsystem_c.dylib    0x3566630a _pthread_start + 242 
14 libsystem_c.dylib    0x35667bb4 thread_start + 0 

Thread 3 name: com.apple.CFSocket.private 
Thread 3: 
0 libsystem_kernel.dylib   0x3558fc60 __select + 20 
1 CoreFoundation     0x3095d8f2 __CFSocketManager + 582 
2 libsystem_c.dylib    0x3566630a _pthread_start + 242 
3 libsystem_c.dylib    0x35667bb4 thread_start + 0 

Thread 4: 
0 libsystem_kernel.dylib   0x3558dc00 mach_msg_trap + 20 
1 libsystem_kernel.dylib   0x3558d758 mach_msg + 44 
2 CoreFoundation     0x309582b8 __CFRunLoopServiceMachPort + 88 
3 CoreFoundation     0x3095a562 __CFRunLoopRun + 350 
4 CoreFoundation     0x308eaebc CFRunLoopRunSpecific + 224 
5 CoreFoundation     0x3092d6d2 CFRunLoopRun + 42 
6 MyProject      0x0011c41a +[ASIHTTPRequest runRequests] (ASIHTTPRequest.m:4773) 
7 Foundation      0x341d0382 -[NSThread main] + 38 
8 Foundation      0x342425c6 __NSThread__main__ + 966 
9 libsystem_c.dylib    0x3566630a _pthread_start + 242 
10 libsystem_c.dylib    0x35667bb4 thread_start + 0 

Thread 5: 
0 libsystem_kernel.dylib   0x355903ec __workq_kernreturn + 8 
1 libsystem_c.dylib    0x356676d8 _pthread_wqthread + 592 
2 libsystem_c.dylib    0x35667bbc start_wqthread + 0 

Thread 6: 
0 libsystem_kernel.dylib   0x355903ec __workq_kernreturn + 8 
1 libsystem_c.dylib    0x356676d8 _pthread_wqthread + 592 
2 libsystem_c.dylib    0x35667bbc start_wqthread + 0 

Thread 7: 
0 libsystem_kernel.dylib   0x355903ec __workq_kernreturn + 8 
1 libsystem_c.dylib    0x356676d8 _pthread_wqthread + 592 
2 libsystem_c.dylib    0x35667bbc start_wqthread + 0 
+0

모든 오류 로그? –

+0

예,하지만 아무 도움이되지 않습니다. 나는 두려워합니다 ... – swalkner

답변

6

당신은 그러므로 당신은 여전히 ​​스택에 저장된 블록을 액세스하려는, 복사본에 아무것도되지 않습니다. 전화 번호 copy으로 전화를 걸어보십시오.

waitingSendToBasketBlock = Block_copy(waitingSendToBasketBlock); 
//and 
currentSendToBasketBlock = Block_copy(currentSendToBasketBlock); 
+0

와우 ... 이제 집에 갈 때입니다. :) - 고마워요! (어떻게 든 그것을 공개해야합니까?) – swalkner

+1

Yup - 완료되면 'Block_release (...);'를 호출하십시오. – bbum

관련 문제