我想创建一个应用程序,从远程数据库中检索事件(类似于日历事件),并在视图中显示它们,创建,编辑和删除新事件或现有事件;目前我正在使用EventKit框架来访问iOS日历,我读了这篇文档并尝试了SimpleEKDemo:
https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765
我实际上可以通过带有JSON响应的HTTP POST请求(NSMutableURLRequest
)从服务器获取事件并在tableView中显示它们,当我点击我可以编辑它的事件时,更新远程数据库条目和如果我切换到iOS日历,我会看到该事件(因此在日历数据库中写入成功);
最重要的是所有事件都必须与远程数据库同步,因此当用户离开我的应用程序,打开iOS日历并编辑之前通过我的应用程序创建的事件时会发生核心问题:在这种情况下,同步不会发生并且数据不一致。
我正在考虑这些可能的方式:
有没有办法挂钩iOS日历,所以我可以在远程数据库中执行更新,仅用于事件的子集?
或者我可以通过我的应用创建仅可编辑的活动吗?
也许我必须退出EventKit并使用自定义更新功能创建自定义日历?
我也读到了这些问题:
Create a calendar in iOS
How to identify EKEvent uniquely with Sync across the devices
Sync database on ipad with remote database
但我不知道我是否走在正确的轨道上。
感谢任何帮助,谢谢。
编辑:使用“synchronized”我的意思是app数据库上的所有数据必须与服务器数据库相同
答案 0 :(得分:0)
至少今天你不能为iOS日历创建一个自定义协议提供程序,我认为这是你要求的(你希望用类似JSON的协议提供日历后端,或者翻译一些应用程序扩展)
有三种选择:
a)使用应用程序使远程数据库保持同步
b)编写自己的日历UI
c)在服务器端或代理
中实施CalDAV听起来像a)就是你今天所做的。您需要在应用程序启动时同步EventKit数据库(以获取其他EventKit应用程序(如Calendar)中的更改)。显然,用户需要偶尔启动你的应用程序才能实现同步...(作为黑客攻击,你也可以通过推送触发你的应用程序)
根据您的需要b)需要做很多工作,而且您没有平台集成。
我认为在您的服务器中实施CalDAV,或者添加一个在您的服务器的JSON和CalDAV之间进行转换的代理可能是最好的方法。然后,您可以将您的服务器作为CalDAV帐户添加到iOS。作为奖励,您可以使用任何其他客户端与您的服务器进行CalDAV ...