2014-06-13 5 views
0

내가 프로그래밍 같은 하나 개의 알람 이벤트 만들려고 해요 :은에/변경 알람 EKAlarm을 추가 할 수있는 [새로 생성] EKEvent 이벤트

+(void)exportEvent:(AgendaEvent*)evento 
        onCalendar:(EKCalendar*)calendar { 

     EKEventStore* store= [[[EKEventStore alloc] init] autorelease]; 
     [store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if(!granted) { 
        // show "not granted" message 
        return; 
       } 
       // save event 
       NSCalendar* gc= [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; 
       EKEvent* event= [EKEvent eventWithEventStore:store]; 
       event.title= evento.descrizione; 
       event.startDate= [gc dateFromComponents:evento.begin]; 
       if(evento.end) 
        event.endDate= [gc dateFromComponents:evento.end]; 
       else { 
        NSDateComponents* endDateComponents= [[evento.begin copy] autorelease]; 
        endDateComponents.day++; 
        endDateComponents.hour= 0; 
        endDateComponents.minute= -1; 
        endDateComponents.second= 0; 
        NSDate* endDate= [gc dateFromComponents:endDateComponents]; 
        // endDate is correctly set at 23:59 of the same day of beginDate, when all day beginDay is at 00:00 
        event.endDate= endDate; 
        event.allDay= YES; 
       } 
       event.calendar= calendar; 
       // reminder 
       NSDateComponents* reminderDateComponents= [[evento.begin copy] autorelease]; 
       reminderDateComponents.day--; 
       reminderDateComponents.hour= 9; 
       reminderDateComponents.minute= 0; 
       NSDate* reminderDate= [gc dateFromComponents:reminderDateComponents]; 
       // reminder date is correctly set at 9:00 of the previous day of beginDate 
       [event addAlarm:[EKAlarm alarmWithAbsoluteDate:reminderDate]]; 

       NSError* err= nil; 
       [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]; 
       if(err) { 
        // show "unable to export" message 
        return; 
       } 
       // show "exported" message 
      }); 
     }]; 
    } 

을하지만 몇 번 만 (또는 그 이상 제대로 자주) [store saveEvent:event span:EKSpanThisEvent commit:YES error:&err]이 실패합니다

2014-06-13 09:34:01.300 xxx[224:60b] CADObjectGetRelation failed with error Error Domain=NSMachErrorDomain Code=268435459 "The operation couldn’t be completed. (Mach error 268435459 - (ipc/send) invalid destination port)" 
    2014-06-13 09:34:01.301 xxx[224:60b] Impossibile esportare evento: Error Domain=EKErrorDomain Code=29 "Impossibile modificare avvisi." UserInfo=0x16a7c7e0 {NSLocalizedDescription=Impossibile modificare avvisi.} 

심지어 EKErrorDomain 코드 (29)에 대한 설명을 찾을 수없는, 아무도 실마리가 무엇입니까?

그 마음을하시기 바랍니다 : 당신이 볼 수 있지만 (너무 정적 분석기에) 나에게 꽤 정확한 것 같다 수있는 내가 호를 사용하지 않는

  • .
  • 나는 또한 두 단계로 이벤트 저장을 분할하려고 시도했다. 하나는 이벤트 용이고 하나는 동일한 결과를 가진 경보 용이다.
  • "Impossibile modificare avvisi." "경고를 변경할 수 없음"을 의미합니다. 이벤트 작성에 실패하지만, 이벤트 및 알람을 만들 때 나타나지 않을 것으로 보인다 경우에도
  • CADObjectGetRelation 관련 메시지가 항상 표시되지 ios7.1.1 및 ios7.1 시뮬레이터 아이 패드 공기에 시도
  • .

답변

0

몇 번의 시행 착오 후 나는 그것을 작동시킬 수 있었다. 문제는 바로 exportEvent:을 호출하기 전에 EKEventStore을 새로 작성하여 EKCalendar 달력을 읽고 선택하는 것입니다.

질문 선택기 본문에서 store을 제거하고 이전 단계의 매개 변수로 전달하면 작동합니다. 일부 ipc가 관련되어 있고 store이 사용자 캘린더 선택 단계와 실제 이벤트 생성간에 할당이 해제되어 있기 때문에 이것으로 보겠습니다. step1의 할당 해제와 step2의 재 할당 사이에 시간이 충분하지 않으면 ipc 연결이 거부되어 가끔씩 작동하는 이유를 설명합니다.