繁体   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