2012-11-19 3 views
1

블록 개체 내에 UIAlertView를 표시하려고하면 EXEC_BAD_ACCESS가 표시됩니다. "viewDidAppear"메서드에서 "onEventAdded"메서드를 호출하면 경고가 예상대로 작동합니다.UIAlertView exec_bad_access 양식 블록 개체

미리 감사드립니다.

- (void) addEvent:(NSDictionary *) event_data 
{ 
    NSLog(@"event_data: %@ ",event_data);  
    // create event 
    EKEventStore *store = [[EKEventStore alloc] init]; 

    [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 

     // event code ... 

     NSError *err; 
     [store saveEvent:event span:EKSpanThisEvent error:&err]; 
     if(err == NULL) 
     { 
      [self onEventAdded]; 
     } 
    }]; 
} 

-(void) onEventAdded{ 
    uiAlert = [[UIAlertView alloc]initWithTitle: nil 
               message: @"Event added to calendar." 
               delegate: nil 
            cancelButtonTitle:nil 
            otherButtonTitles:@"OK",nil]; 
    [uiAlert show]; 
} 

답변

0

완료 블록이 메인 스레드에서 실행되지 않은 것 같습니다. 기본 스레드에서만 UI 작업 (예 : 경고 표시) 만 할 수 있습니다.

+0

그건 속임수 였어. [self performSelectorOnMainThread : @selector (onEventAdded) withObject : nil waitUntilDone : NO]를 추가했습니다. 블록 객체의 끝에서 작동합니다. 감사 – Rico