2011-08-05 3 views
0

가끔 발생하는 문제가있어서 해결책을 찾을 수 없습니까? 누군가 도와 줄 수 있습니까? 감사합니다EXC_BAD_ACCESS (SIGSEGV) 및 KERN_INVALID_ADDRESS (0xa0000008)

다음

는 충돌의 로그와 메소드가 호출된다

0 libobjc.A.dylib     0x00003fb0 objc_msgSend + 16 
1 Authentic     0x00048ce2 -[JobsSubtitleView touchUp:] (JobsSubtitleView.m:172) 
2 CoreFoundation     0x00026486 -[NSObject performSelector:withObject:withObject:] + 46 
3 UIKit       0x00032bf8 -[UIApplication sendAction:to:from:forEvent:] + 56 
4 UIKit       0x00032bb4 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 24 
5 UIKit       0x00032b92 -[UIControl sendAction:to:forEvent:] + 38 
6 UIKit       0x00032902 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 486 
7 UIKit       0x0003307a -[UIControl touchesEnded:withEvent:] + 470 
8 UIKit       0x00031914 -[UIWindow _sendTouchesForEvent:] + 312 
9 UIKit       0x0003133a -[UIWindow sendEvent:] + 374 
10 UIKit       0x000076e6 -[UIApplication sendEvent:] + 350 
11 UIKit       0x000070d2 _UIApplicationHandleEvent + 5802 
12 GraphicsServices    0x00004f44 PurpleEventCallback + 876 
13 CoreFoundation     0x00083a28 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ +   32 
14 CoreFoundation     0x000839ca __CFRunLoopDoSource1 + 134 
15 CoreFoundation     0x000825f0 __CFRunLoopRun + 1364 
16 CoreFoundation     0x00023f72 CFRunLoopRunSpecific + 294 
17 CoreFoundation     0x00023e3a CFRunLoopRunInMode + 98 
18 GraphicsServices    0x0000411e GSEventRunModal + 150 
19 UIKit       0x00002472 UIApplicationMain + 1074 
20 Authentic     0x0006bbd0 main (main.m:17) 
21 Authentic     0x00002e8c start + 32 


- (void) touchUp:(id)sender { 
if(![[UIApplication sharedApplication] isNetworkActivityIndicatorVisible]) { 
    UIButton *jobsSubtitleButton = (UIButton*)sender; 
    [jobsSubtitleButton setSelected:!jobsSubtitleButton.selected]; 
    [jobsViewController setClickType:YES]; /*** LINE 172 ***/ 
    if(![jobsViewController isSearching]) { 
     [jobsViewController setIsSearching:YES]; 
     if([jobsViewController clickType]) { 
      [self performSelector:@selector(reloadJobs) withObject:nil afterDelay:1.0f];    
     } else { 
      [self performSelector:@selector(reloadJobs) withObject:nil];  
     } 
    } 
} 

} 당신은 문제의 근본 원인을 명확하게하기에 충분한 코드를 제공하지 않은

+1

'''jobsViewController'''가 초기화되었습니다. –

+0

jobsViewController는 initWithFrame : frame 메소드에서 초기화됩니다. touchUp 메소드는 4 개의 버튼으로 동시에 호출 할 수 있으며, changeType은 setType이 NO 일 경우에만 setClickType YES로 설정됩니다. 이럴 수있어? 감사합니다 – ruiaureliano

+0

이 충돌을 다시 만들 수 있다면 충돌이 발생했을 때 디버거에 표시된대로 jobsViewController의 값을 결정할 수 있습니까? 충돌 시나리오에서 포인터가 올바르지 않은 것 같습니다. –

답변

0

. 오브젝트의 jobsViewController ivar가 이미 할당 해제 된 오브젝트를 가리 키기 때문에 충돌이 발생합니다. 하지만 왜이 시점에서 할당 해제 되었습니까? 이 코드를 기반으로 알 수있는 방법이 없습니다. 가장 큰 원인은 소유권을 잊어 버렸거나 재산이 "보유"로 선언되지 않았기 때문입니다. 그러나 근본 원인이었던 수많은 프로그래밍 실수가있을 수 있습니다. jobsViewController가 가리키는 객체를 유지하지 않는 것과 관련된 문제를 구체적으로 검토하는 코드 검토가 필요합니다.