You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PyObjC调用EventKit保存事件报错EKErrorDomain Code=11

解决EKErrorDomain Code=11错误及PyObjC创建EKEvent的正确方式

错误原因分析

EKErrorDomain Code=11提示的“That event does not belong to that event store”,本质是事件与事件存储的绑定关系不符合系统预期。你虽然通过setEventStore_设置了事件的存储,但这种“先空初始化再绑定”的方式没有正确建立EKEvent内部与事件存储关联的必要状态,导致系统判定事件不属于当前存储。

正确创建EKEvent的方式

Objective-C中的EKEvent.init(eventStore:)对应PyObjC的initWithEventStore_方法,这才是创建关联指定事件存储的EKEvent的正确方式,而非先调用空参init()再补设存储。

修正后的代码

# 提前导入必要常量
from EventKit import EKEntityTypeEvent
from Foundation import ObjCVar

ek_store = EKEventStore.alloc().initWithAccessToEntityTypes_(EKEntityTypeEvent)  # 明确请求事件权限,避免0的模糊性
print(f'{ek_store=}')

my_cal_identifier = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
my_calendar = ek_store.calendarWithIdentifier_(my_cal_identifier)
print(f'{my_calendar.eventStore()=}')

# 改用带eventStore的初始化方法创建事件
event = EKEvent.alloc().initWithEventStore_(ek_store)
print(f'{event.eventStore()=}')

event.setStartDate_(my_startDate)
event.setEndDate_(my_endDate)
event.setCalendar_(my_calendar)
event.setTitle_('My new event')

# 传入错误指针捕获详细错误信息,方便调试
error = ObjCVar()
success = ek_store.saveEvent_span_error_(event, 0, error)
if not success:
    print(f'保存失败: {error.value()}')

额外注意事项

  • 初始化EKEventStore时,不要用0作为entityTypes参数,明确指定EKEntityTypeEvent,确保请求了正确的事件访问权限。
  • 保存事件时传入错误指针,能获取比通用提示更详细的错误细节,帮助排查其他潜在问题。

内容的提问来源于stack exchange,提问作者Georg Pfolz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:33:01