EventKit 学习(译)

From:http://docs.xamarin.com/guides/ios/platform_features/introduction_to_eventkit/ html

 本教程展现了对于如何经过EventKit访问和使用存储在日历数据库(Calendar Database)中的日历(Calendars)、日历事件(CalendarEvents)和提醒的概述。而且讲述了重要的类(Class)还有他们的在编程中的用法,固然还有一些有关EventKit框架的经常使用任务。ios

  概述数据库


 

  iOS有两个内建的日历应用:Calendar,Reminders。很显然能看出Calendar是管理日历数据的,而Reminders却不是特别显而易见。Reminders拥有在指定时间安排、完成等等的事件的日期。好比,iOS存储着全部的日历数据,不管它属于日历事件(calendar events)或者提醒(reminders),他们都属于日历数据库(Calendar Database)。编程

  EventKit框架提供了一种访问存储在日历数据库(Calendar Database)的日历、日历事件、提醒数据的方式。iOS4开始就支持访问日历和日历事件、而iOS6起增长支持访问提醒。缓存

  这个教程咱们包含下面内容:app

  • EventKit Basics - 这部分会经过主要的类(Class)介绍EventKit的基础,而且对他们的用法进行阐述。这部分是下面部分的必要部分。
  • Common Tasks - 这部分旨在讲解一些经常使用的用法,好比 遍历日历,建立、保存、检索日历事件和提醒,就像使用内建应用同样建立修改日历事件。这部分不须要从头到尾的读,这意味着它只是对特殊的任务的参考。

教程中得全部任务都有例子:框架

 

 

  必要条件异步


  EventKit是在iOS4.0提出的,但访问提醒(Reminders)是在iOS6中提出。这样的话,一般作EventKit 开发,使用日历要基于iOS4.0,提醒须要基于iOS6。ide

  另外,Reminders应用程序不适用于模拟器,这意味着提醒数据是不能够用的,除非你先添加了他们。还有,访问请求(assess requests)只在真实设备上展现给用户。这样的话,EventKit开发要基于真实设备来测试。测试

  

  Event Kit 基础


  当咱们使用EventKit的时候,重要的是掌握经常使用类和他们的用法。全部的类(Class)均可以在MonoTouch.EventKit 和 MonoTouch.EventKitUI(for the EKEventEditController)中找到.

  EventStore

  EventStore是EventKit中最重要的类,由于在EventKit中执行的任何操做都须要它。EventStore能够认为是 持久存储器 或者 数据库,EventKit数据的引擎。从EventStore中,你能够访问到Calendar应用程序中得日历还有日历事件,固然还有Reminders应用中得提醒。

  由于EventStore很像一个数据库引擎,因此他应该长久持有,这意味着在应用的生命周期内它应该尽量的少建立、销毁。实际,建议这样:一旦你在应用中建立了一个EventStore,你应该在应用的生命周期内保持它(EventStore)的引用,除非你肯定你再不使用它了。另外,全部的调用都针对鱼一个EventStore实例。因此呢,推荐单例模式。

  Creating an Event Store

  下面的代码,说明了一个简单而有效方式建立一个EventStore的单例,使它在应用中静态存在。

 1 public class App
 2 {
 3         public static App Current {
 4                 get { return current; }
 5         }
 6         private static App current;
 7 
 8         public EKEventStore EventStore {
 9                 get { return eventStore; }
10         }
11         protected EKEventStore eventStore;
12 
13         static App ()
14         {
15                 current = new App();
16         }
17         protected App () 
18         {
19                 eventStore = new EKEventStore ( );
20         }
21 }

  上面的代码在应用加载的时候 使用了单例模式实现了EventStore对象。这个对象可以全局的访问,像这样:

App.Current.EventStore;

  请求 日历 和 提醒 数据

  在容许经过EventStore访问任何数据以前,应用程序必须首先获取权限,不管日历事件(calendar event)仍是 提醒数据(reminders data),取决于你。为此,EventStore暴露了一个方法RequestAccess,当调用它的时候,系统会弹出一个提示框给用户,告诉用户应用程序请求访问日历数据或者提醒数据。由于有提示框,因此这个调用是异步的,而且完成后会有一个带两个参数(一个bool类型的granted和 NSError)的回调被调用,指出是否获取到权限访问。

  下面代码就是请求权限访问日历事件:

1 App.Current.EventStore.RequestAccess (EKEntityType.Event, 
2         (bool granted, NSError e) => {
3                 if (granted)
4                         //do something here
5                 else
6                         new UIAlertView ( "Access Denied", "User Denied Access to Calendar Data", null,"ok", null).Show ();
7                 } );

  一旦请求被容许,这个应用只要安装在设备上,那么就不会在被弹出再提示。可是,权限只是容许访问给出的资源类型,是日历事件或提醒。若是一个应用须要这两种都能访问,那就都要请求。

  由于权限是被缓存的了,那么每次请求相对轻松,因此在每一个操做以前都请求权限是个不错的主意。

  另外,由于回调方法是在非UI线程中调用的,因此全部更新UI得操做都要在Main Thread调用,不然就会引起异常。

  EKEntityType

  这是个描述EventKit或者数据的类型 的枚举类型,它有两个值:Event、Reminder。它在不少方法中被使用,包括EventStore的RequestAccess方法,告诉EventKit要获取什么类型的数据权限。

  EKCalendar

  EKCalendar至关于一个日历,包含了一组日历事件,日历可以存储在不少地方,例如 本地、iCloud、第三方商:Exchange Sever 或者Google。大多时候,EKCalendar被用来告知EventKit,事件从何查找,存储到哪里。

  EKEventEditController

  EKEventEditController可以在MonoTouch.EventKitUI中找到,它是个内建的控制器,用于建立修改日历事件。这很像内建的相机控制器,EKEventEditController帮你作了繁重的UI和保存数据的工做。

  EKEvent

  EKEvent至关于一个日历,不论是EKEvent仍是EKReminder都继承于EKCalendarItem,他们都有Title、Notes等字段。

  EKReminder

  EKReminder至关于一个提醒事项。

  EKSpan 

  EKSpan是个当修改事件为可重复的时候用于描述事件的跨度的枚举值,它有两个值:ThisEvent、FutureEvents。ThisEvent意味着任何改变,只会发生在被引用的一系列特定事件,而FutureEvents会影响事件和全部将来的复发。

 

  Tasks


 都是代码了,参照原文

 还有Apple的Guide

Calendar and Reminders Programming Guide

 https://developer.apple.com/library/prerelease/ios/documentation/DataManagement/Conceptual/EventKitProgGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009765

相关文章
相关标签/搜索