保存iOS日历事件现在出错

时间:2015-11-09 15:22:52

标签: ios runtime-error ekevent ekeventstore

Error pushing dirty properties for EKPersistentLocation to daemon: Error Domain=NSMachErrorDomain Code=4097 "unknown error code"
Connection interrupted!

关于为什么我不能保存我的活动的任何想法?

    NSString *eventIdentifier = ...
    EKEventStore *store = [EKEventStore new];
    EKEvent *event = [store eventWithIdentifier:eventIdentifier];
    if(event == nil) {
        event = [EKEvent eventWithEventStore:store];
    }

    //fill event code here

    //save event
    NSError *error = nil;
    BOOL success = [store saveEvent:event span:EKSpanThisEvent commit:YES error:&error];
    if(error) {
        @throw error;
    }

    if(!success) {
        @throw [Error ERROR_EVENT_SYNC_FAILED_NO_ERROR];
    }

有趣的是,没有生成错误对象,但成功是NO。错误代码和消息不是特别有用。我不确定肮脏的属性是什么意思,但我不是重复使用旧的事件,而是每次从商店抓一个或者新的一个。我也不知道Connection Interrupted意味着什么。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

我有类似的错误。这是因为请求访问.event类型的事件并尝试保存提醒。如果要将日历条目保存为事件,则在请求访问提醒请求访问类型.reminder时请求访问.event。
以下是请求访问提醒的示例。

    override func viewWillAppear(_ animated: Bool) {
            self.eventStore = EKEventStore()
            self.reminders = [EKReminder]()
            self.eventStore.requestAccess(to: .reminder, completion: requestAccessCompletionHandler)
        }

        func requestAccessCompletionHandler (granted: Bool, error: Error?) {
            NSLog("requestAccessCompletionHandler")
            if (granted) {

                let predicate = self.eventStore.predicateForReminders(in: nil)
                self.eventStore.fetchReminders(matching: predicate, completion: { (reminders: [EKReminder]?) -> Void in
                    self.reminders = reminders
                    DispatchQueue.main.async {
                        self.tableView.reloadData()
                    }
                })
            } else {
                print("The app is not permitted to access reminders, make sure to grant permission in the settings and try again")
            }
        }

答案 1 :(得分:0)

对于任何想知道的人来说,“脏属性”是指没有为EKEvent属性分配正确的类型。标题中的“现在给出错误”是因为在调用之前由于更改和正确的代码而没有调用特定的代码分支。

答案 2 :(得分:0)

为了帮助搜索jquery.validate.unobtrusive与EventKit相关的其他人,我最近在更新跨度为{的重复事件的NSMachErrorDomain Code=4097startDate属性时开始看到此代码{1}},但不立即提交更改。

通话:

endDate

以及稍后解雇编辑屏幕时:

.futureEvents

第二个调用抛出错误,不提交更改,并在控制台中显示此输出:

try eventStore.save(event, span: span, commit: false)

修改:我发现真正的问题是我与try eventStore.save(event, span: span, commit: true)的初始通话是使用Month 13 is out of bounds [EventKit] Failed to get melted object for frozen object related by key detachedItems. Event store is nil [EventKit] Connection interrupted! [CADXPCProxyHelper] Received error from calaccessd connection: Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.apple.calaccessd" UserInfo={NSDebugDescription=connection to service named com.apple.calaccessd}. Attempting to call any reply handler. [EventKit] Error committing event store: [Error Domain=NSMachErrorDomain Code=4097 "unknown error code"] ,但我的功能是没有更新所选的范围,所以第二个电话默认为commit: false。似乎跨距之间的这种不匹配导致了错误。