簡體   English   中英

無法將警報EKAlarm添加/更改到[新創建的] EKEvent事件

[英]Can't add/change alarms EKAlarm to a [newly created] EKEvent event

我正在嘗試以編程方式創建一個警報事件,如下所示:

    +(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的描述,有人知道嗎?

請注意:

  • 如您所見,我沒有使用arc,但對我來說似乎是正確的(也適用於靜態分析器)。
  • 我還嘗試將事件保存分為兩個階段:一個用於事件,一個用於警報,結果完全相同。
  • “不可能修改avvisi。” 表示“無法更改警報”。
  • 在iPad Air上使用ios7.1.1和ios7.1模擬器進行了嘗試
  • 即使事件創建失敗,也不總是顯示與CADObjectGetRelation相關的消息,但是在創建事件和警報時似乎不會出現。

好的,經過一番嘗試和錯誤后,我設法使其正常運行。 問題在於,就在調用exportEvent:之前exportEvent:我正在創建另一個EKEventStore來讀取和選擇EKCalendar日歷。

我從問題選擇器主體中刪除了store ,並將其作為上一步中的參數傳遞,現在可以使用了。 我想這是因為涉及到一些ipc,並且store在用戶日歷選擇步驟和實際事件創建之間被重新分配。 如果在步驟1的解除分配與步驟2的重新分配之間沒有足夠的時間,則ipc連接將被拒絕,這說明了為什么有時它會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM