6

当我尝试获取 EKEvent 的标识符时,我得到的只是一个 nil 值。由于在 iOS5 中 EKEvent 是 EKCalendarItem 的子类,我想我可能能够获得 EKCalendarItem 的 UUID,但它也返回 nil。

在尝试访问标识符或 UUID 属性时,有时我也会收到此错误:

CADObjectGetInlineStringProperty failed fetching uniqueID for EKPersistentEvent with error Error Domain=NSMachErrorDomain Code=268435459 "The operation couldn’t be completed. (Mach error 268435459 - (ipc/send) invalid destination port)"

我已经被这个问题困扰了很长一段时间了,但我认为它与 iOS5 beta 相关。但是由于我们现在在 iOS5 上,它仍然无法正常工作。

4

7 回答 7

8

在我的应用程序中,我发现如果您在获取它的 eventStore 被释放时请求 eventIdentifier,它会返回 nil。但是,如果您在它返回 id 之前询问 eventIdentifier 就可以了。然后,您可以释放 EKEventStore 实例并毫无问题地请求标识符......似乎它需要 eventStore 来检索 id,但我没有收到任何警告。

于 2011-11-20T01:40:54.347 回答
7

当我尝试获取 EKEvent 的标识符时,我得到的只是一个 nil 值

在检索标识符之前尝试保存并提交您的事件:

[eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
NSString *strId = [[NSString alloc] initWithFormat:@"%@", event.eventIdentifier];
于 2011-11-04T13:15:32.337 回答
2

刚刚经历了这个问题,eventIdentifier结果在提交到数据库之前会为空,所以你需要一个提交:YES在saveEvent函数中[self.eventStore saveEvent:event span:EKSpanThisEvent commit:YES error:&error];

之后,您可以获得 eventIdentifier。

我的错是通过一个 NO to commit: 参数。

于 2014-02-28T18:33:02.317 回答
2

eventIdentifier 在将事件添加到 EKEventStore 时设置。如果您在添加之前尝试访问此值,它将返回 null。

于 2012-03-22T15:02:58.030 回答
0

对我来说,它eventIdentifier是空的,因为我没有设置endDate. 因此,eventIdentifier如果在创建该事件时出现任何错误,通常可以为 null。您可以检查以下错误:

NSError *err = nil;
[store saveEvent:event span:EKSpanThisEvent commit:YES error:&err];
NSLog(@"Error : %@",err);
于 2016-12-27T02:24:46.557 回答
0

对于斯威夫特 3

我发现,问题在于我在检索日期的函数中创建了商店。

在函数之外创建商店并使用它的实例解决了这个问题。

class CalendarServices: NSObject {

    var store = EKEventStore()

    func fetchEventKitCalendarEvents(date: Date, completion: @escaping (_ events: [EKEvent]?, _ error: Error?)->()) {

        let calendar = Calendar.current

        guard self.getEventKitAuthorizationStatus() == .authorized else {
            completion(nil, CoreServices.setError(message: "AuthorizationStatus != authorized"))
            return
        }

        guard let endDate = calendar.date(byAdding: .day, value: 1, to: date)  else {
            completion(nil, CoreServices.setError(message: "Error creating endDate"))
            return
        }

        CoreServices.background {

            let predicate = self.store.predicateForEvents(withStart: date, end: endDate, calendars: self.fetchEventKitCalendars())

            let events = self.store.events(matching: predicate).sorted() {
                (e1: EKEvent, e2: EKEvent) -> Bool in
                return e1.startDate.compare(e2.startDate) == .orderedAscending
            }

            CoreServices.async {

                completion(events, nil)

            }

        }

    }

}
于 2017-08-22T12:38:10.767 回答
0

在保存事件之前,不会生成 EKEvent eventIdendifier。将事件保存到 EKEventStore 后,您可以访问/存储 eventIdentifier

    [store saveEvent:event span:EKSpanThisEvent error:&err];
    NSString *eventIdentifier = event.eventIdentifier;
于 2017-05-19T19:15:27.523 回答