2012-01-24 6 views
0

EKEventEditViewController에서 완료 버튼을 클릭하면 앱이 "exc_bad_access"라는 오류 메시지가 나타납니다. 중단 점을 사용하여 감지했지만 찾을 수 없습니다. gdb에 대한 충돌은 없습니다. 어디에서 충돌을 확인해야합니까? 완료 버튼은 컨트롤을 EKEventEditViewDelegate 메쏘드로 옮기지 않습니다. 그냥 충돌합니다. plz에서 도와주세요.가 EKEventEditViewController에서 크래시를 감지 할 수 없습니다.

여기 내 코드입니다

-(void)viewWillAppear:(BOOL)animated 
{ 

EKEventEditViewController *addController = [[EKEventEditViewController alloc] 
initWithNibName:nil bundle:nil]; 
addController.eventStore = self.eventStore; 
addController.event = event; 
addController.editViewDelegate = self; 
[self presentModalViewController:addController animated:YES]; 
[super viewWillAppear:YES]; 

} 

#pragma mark - 
#pragma mark EKEventEditViewDelegate 

- (void)eventEditViewController:(EKEventEditViewController *)controller 
     didCompleteWithAction:(EKEventEditViewAction)action { 

NSError *error = nil; 
EKEvent *thisEvent = controller.event; 

switch (action) { 

     case EKEventEditViewActionCanceled:  
     break; 

    case EKEventEditViewActionSaved: 
      [controller.eventStore saveEvent:controller.event 
        span:EKSpanThisEvent error:&error]; 
     break; 

    case EKEventEditViewActionDeleted: 
     [controller.eventStore removeEvent:thisEvent span:EKSpanThisEvent 
        error:&error]; 
     break; 

    default: 
     break; 
} 

[controller dismissModalViewControllerAnimated:YES]; 
[self backTopreviousController]; 
} 

-(void)backTopreviousController 
{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

답변

0

디버그 프로그램 eventEditViewController:didCompleteWithAction의 시작 부분에 중단 점을 설정 한 후. 프로그램이 중단 점에 도달하면 단계별로 실행하십시오. 다음과 같이 수행

, 당신도 알 :

프로그램 충돌하게 문
  1. , 또는

  2. 를 프로그램이 충돌 이전에도 그 방법을 입력하는 것이다.

경우 1에서 메시지를 보내는 각 개체를 검사하고 할당이 취소되지 않았는지 확인해야합니다. 사례 2의 경우 완료 단추와 관련된 동작 정의를 검사해야합니다.

1

exc_bad_access은 할당 해제 된 메모리 (아마도 메모리 관리 문제)에 액세스하고 있음을 나타냅니다. 이 문제는 어느 시점에서 객체를 해제 할 수 있고이 객체에 액세스 할 때 나중에 문제가 발생하기 때문에 해결하기가 다소 어렵습니다.

당신은 시도 할 수 있습니다 다음 : 당신은 또한 Zombies

  • 를 선택할 수있는 프로그램 "계기"가 열립니다

    1. 목록에서 "실행 버튼 드롭 다운"
    2. 을 클릭
    3. Profile을 선택 이제 앱과 상호 작용하여 오류를 일으킬 수 있습니다.
    4. 오류가 발생하자마자 개체가 출시되었을 때 힌트를 얻어야합니다. 전에는 할당이 취소되었습니다.

    Zombies http://www.dimzzy.com/blog/wp-content/uploads/2011/02/leaky-zombies-tool.png

  • +0

    저는 100 % 확신하지는 않지만 NSZombies를 먼저 활성화해야한다고 생각합니다. (Edit Scheme -> Diagnostics 그리고 좀비 오브젝트와 Malloc Stack 사용하기) 또한 그는 시뮬레이터에서만 이것을 사용할 수 있습니다! – BBog

    +0

    나는 당신이 그것을 가능하게 할 필요가 없다고 생각한다. 나는 틀릴 수도 있지만 '좀비'모드를 선택하는 나의 이해는 좀비 객체를 즉각적으로 사용할 수 있어야합니다. – Besi

    +0

    내가 말했듯이, 나는 완전히 확신하지 못합니다. 어쨌든, 그가 그 (것)들을 가능하게하는 경우에, 그는 계기를 사용할 필요없이 문제의 근원을 찾아 낼 수 있을지도 모르다. 스킴에 NSZombiesEnabled가 있으면 앱이 추락 한 정확한 행이 표시됩니다.그게 제가 평소에하는 일이고, 내가 갈 때의 정확한 문제를 정확하게 지적 할 수 없을 때만 인스 트루먼 트를 사용합니다. 차라리 그 도구에서 벗어나고 싶다면, xcode는 충분한 양의 램을 먹는다.> – BBog

    0

    코드는 다음 이유로 인해 라인의 충돌한다.

    [controller dismissModalViewControllerAnimated:YES]; 
    [self backTopreviousController]; 
    

    중 원하는 것을 선택하거나 닫으십시오. 그러나 둘 다. 이 클래스를 호출 한 방법에 따라 다릅니다. Push or presentModal!

    관련 문제