在 iCal 上获取/设置日历事件(以编程方式)

Get / Set calendar events on iCal (programmatically)

提问人:Uri 提问时间:11/3/2009 最后编辑:Mike AbdullahUri 更新时间:3/25/2013 访问量:9840

问:

是否有任何客观的 C API 或对象可以让我访问 iCal 及其事件? 我需要读取给定日期的日历事件,并选择性地设置一个新事件。

代码是纯 C 或目标 C(在程序的 GUI 版本中)。我在 mac os 10.6 上使用 xcode。

示例代码将不胜感激。

Objective-C macOS iCalendar 日历商店

评论


答:

1赞 Ned Deily 11/4/2009 #1

您可能会发现使用 iCal 的 Apple Events 脚本界面更容易。如果您不喜欢直接使用 AppleScript 的想法,可以使用 Apple 的 Scripting Bridge,或者更好的是,将 Appscript 用于 Objective-C、Ruby 或 Python。以下是使用 py-appscript 访问和修改给定日期事件的一种方法:

>>> from appscript import *
>>> from datetime import datetime
>>> start_time = datetime(2009,10,26)
>>> end_time = datetime(2009,10,26,23,59,59)
>>> calendar = app('iCal').calendars['Home']
>>> for event in calendar.events[(its.start_date >= start_time).AND(its.start_date <= end_time)]():
...   event_properties = event.properties()
...   print event_properties[k.start_date], event_properties[k.summary]
... 
2009-10-26 18:40:00 <event 1>
2009-10-26 23:38:00 <event 2>
>>> event.summary.set(to='something else')

评论

0赞 Uri 11/4/2009
谢谢,但即使我非常喜欢 Python 和其他脚本,这次我也不能使用它。C 或目标 C
0赞 Ned Deily 11/4/2009
将该代码转换为 Appscript 的 Objective C 版本应该很简单。
0赞 Uri 11/4/2009
我首先问的原因是因为我什至不知道我需要哪些对象或 API 才能与日历商店交谈。因此,如果我不知道我需要什么功能,翻译它会有点困难。
0赞 Ned Deily 11/5/2009
我不确定我是否理解正确,但是,如果您想了解 iCal 脚本数据模型,与任何 OS X 可编写脚本的应用程序一样,执行此操作的标准方法是使用 AppleScript 编辑器(在 /Applications/Utilites 中)打开词典命令来内省模型。但在这种情况下,请使用 Appscript (appscript.sourceforge.net/tools.html) 提供的工具:ASDictionary 将 iCal 的数据模型字典转换为 Objective C-appscript 语法,还可以自动生成所有 Objective C 粘附代码来访问该数据模型。无论如何,祝你好运。
1赞 Mike Abdullah 11/5/2009
使用 Apple Events 的一缺点是需要在访问 iCal 时启动它。日历存储的设计正是为了避免这样做。
5赞 andrewrjones 3/25/2013 #2

从 10.8 (Mountain Lion) 开始,日历存储已弃用。您现在应该使用 Event Kit