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

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

  概述


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

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

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

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

教程中得所有任务都有例子:

 

 

  必要条件


  EventKit是在iOS4.0提出的,但访问提醒(Reminders)是在iOS6中提出。这样的话,通常做EventKit 开发,使用日历要基于iOS4.0,提醒需要基于iOS6。

  另外,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对象。这个对象能够全局的访问,像这样:

  1. 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

EventKit 学习(译)的更多相关文章

  1. ApacheCN 深度学习译文集 2020.9

    协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3.c 在线阅读 ApacheCN 面试求职交流群 72418 ...

  2. ApacheCN 深度学习译文集 20210125 更新

    新增了七个教程: PyTorch 中文官方教程 1.7 学习 PyTorch PyTorch 深度学习:60 分钟的突击 张量 torch.autograd的简要介绍 神经网络 训练分类器 通过示例学 ...

  3. ApacheCN 深度学习译文集 20210112 更新

    新增了六个教程: TensorFlow 2 和 Keras 高级深度学习 零.前言 一.使用 Keras 入门高级深度学习 二.深度神经网络 三.自编码器 四.生成对抗网络(GAN) 五.改进的 GA ...

  4. ApacheCN 深度学习译文集 20201229 更新

    新增了七个教程: TensorFlow 和 Keras 应用开发入门 零.前言 一.神经网络和深度学习简介 二.模型架构 三.模型评估和优化 四.产品化 TensorFlow 图像深度学习实用指南 零 ...

  5. ApacheCN 深度学习译文集 20201218 更新

    新增了四个教程: Python 人工智能中文版 0 前言 1 人工智能简介 2 人工智能的基本用例 3 机器学习管道 4 特征选择和特征工程 5 使用监督学习的分类和回归 6 集成学习的预测分析 7 ...

  6. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.11

    公告 我们始终与所有创作者站在一起,为创作自由而战.我们还会提供一切必要的技术支持. 我们全力支持科研开源(DOCX)计划.希望大家了解这个倡议,把这个倡议与自己的兴趣点结合,做点力所能及的事情. 我 ...

  7. 博弈论揭示了深度学习的未来(译自:Game Theory Reveals the Future of Deep Learning)

    Game Theory Reveals the Future of Deep Learning Carlos E. Perez Deep Learning Patterns, Methodology ...

  8. [译]2016年深度学习的主要进展(译自:The Major Advancements in Deep Learning in 2016)

    译自:The Major Advancements in Deep Learning in 2016 建议阅读时间:10分钟 https://tryolabs.com/blog/2016/12/06/ ...

  9. (译) 强化学习 第一部分:Q-Learning 以及相关探索

    (译) 强化学习 第一部分:Q-Learning 以及相关探索 Q-Learning review: Q-Learning 的基础要点是:有一个关于环境状态S的表达式,这些状态中可能的动作 a,然后你 ...

随机推荐

  1. iOS-OC内存管理

    目标 1.[理解]内存管理 2.[掌握]第一个MRC程序 3.[掌握]内存管理的原则 4.[理解]野指针与僵尸对象 5.[理解]单个对象的内存管理 6.[理解]多个对象的内存管理 7.[掌握]set方 ...

  2. java集合类的学习总结一

    概况总结 首先,区分最顶层接口的区别:Collection和Map的区别:前者是单个元素:后者存储的是一对元素.Collection有List和Set两个子接口,两个子接口下分别有Vector和Arr ...

  3. hibernate(二)一级缓存和三种状态解析

    序言 前一篇文章知道了什么是hibernate,并且创建了第一个hibernate工程,今天就来先谈谈hibernate的一级缓存和它的三种状态,先要对着两个有一个深刻的了解,才能对后面我要讲解的一对 ...

  4. Linux Buffers和Cached的区别(转)

    在linux下使用free命令查看内存使用情况,有buffers和cached两项,以下是它们的区别: buffers是为块设备设计的缓冲.比如磁盘读写,把分散的写操作集中进行,减少磁盘I/O,从而提 ...

  5. [C/C++] zltabout(带缩进的格式化输出)v1.0。能以相同的代码绑定到 C FILE 或 C++流

    作者:zyl910 一.缘由 在写一些生成文本的程序时,经常需要使用带缩进的格式化输出的功能.以前为此写过不少类似的函数,可惜它们的可重用性很差. 这是因为——1) C语言的FILE*不支持重定向到自 ...

  6. CentOS 6.5 EasyPR环境搭建

    EasyPR是一款开源的中文车牌识别系统,项目地址. 在搭建的过程中,主要的问题是注意版本的兼容性,这里面的版本包括:opencv版本,g++版本以及cmake版本. 我使用的EasyPr版本信息如下 ...

  7. Windows7 网上邻居设置

    1.运行gpedit.msc进入组策略:Windows设置---安全配置---本地策略---安全选项---网络访问:本地账户的共享和安全模型(设为仅来宾-对本地用户进行身份认证)---网络访问:不允许 ...

  8. 高吞吐量的分布式发布订阅消息系统Kafka--spring-integration-kafka的应用

    一.概述 Spring Integration Kafka 是基于 Apache Kafka 和Spring Integration来集成Kafka,对开发配置提供了方便. 二.配置 1.spring ...

  9. 阿里云 Redis 服务遇到的问题

    ERR unknown command eval 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: St ...

  10. ./adb: cannot execute binary file:

    问题描述: 在32位ubuntu(12.04)上下载了最新的android SDK,使用SDK manager 下载ADB之后发现,无法运行ADB命令,排除权限问题,在网上搜到答案: http://a ...