频道栏目
首页 > 程序开发 > 移动开发 > IOS > 正文
iOS9中怎样在日历App中创建一个任意时间之前开始的提醒(二)
2016-03-14 09:46:13         来源:大熊猫猪侯佩 (︶^︶)  
收藏   我要投稿
接上一篇,我们来看一下如何根据类型和名称找到一个特定的日历源,首先我们写一个帮助方法:
-(EKSource*)sourceInEventStore:(EKEventStore*)store sourceType:(EKSourceType)type sourceTitle:(NSString*)title{
    for (EKSource *source in store.sources) {
        if (source.sourceType == type && [source.title caseInsensitiveCompare:title] == NSOrderedSame) {
            return source;
        }
    }
    return nil;
}

我们当然可以只通过日历源的title来查找,不过加上对其类型的检查可谓是双保险.我们在上述方法的开头位置下断点,在模拟器中运行App,不出意外应该会在该断点中断下来,我们在debug console中输入:

po store.sources

可以看到模拟器中所有日历源的输出:

(lldb) po store.sources
<__NSArrayI 0x787939e0>(
EKSource <0x78792770> {UUID = 705E0A9A-1FD0-4B56-B7D9-CA4E268ECF90; type = Local; title = Default; externalID = (null)},
EKSource <0x787939a0> {UUID = F2F63129-2812-48C0-80B8-AFCEFFF9AC84; type = Other; title = Other; externalID = (null)}
)

可以看到日历数据库中第一个日历源的真正名称为Default,而后面一个名称为Other.这就印证了我在第一篇中说的,在模拟器中显示的第一个日历源的名称只是一个便于用户理解的别名.

如果在真机中运行呢?你会发现第一个日历源的名称为iCloud.区别是前者是一个本地的源(EKSourceTypeLocal),后者是一个远程的源.这里多说几句,远程的日历源也有很多种类型,比如:

    EKSourceTypeExchange
    EKSourceTypeCalDAV

它们分别表示两种不同的日历通讯协议,用来同步客户端和服务器端上的日历内容.感兴趣的童鞋可以自行度娘谷哥搜寻.

现在我们可以肯定模拟器中的Default源是本地源,而iCloud源是一个CalDAV类型的远程源.

下面我们就按照上面我们分析过的内容来分别获取Default和iCloud源:

//获取iCloud源
EKSource *icloudSource = [self sourceInEventStore:store sourceType:EKSourceTypeCalDAV sourceTitle:@"iCloud"];
//获取本地Default源
EKSource *localSource = [self sourceInEventStore:store sourceType:EKSourceTypeLocal sourceTitle:@"Default"];

三.获取日历源中的指定日历

现在我们获取到了一个日历源,那么怎么获取其中某一个日历呢?日历在EventKit的表示为一个EKCalendar的实例,我们同样写一个帮助方法:

-(EKCalendar*)calendarWithTitle:(NSString*)title type:(EKCalendarType)type inSource:(EKSource*)source forEventType:(EKEntityType)eventType{
    for (EKCalendar *calendar in [source calendarsForEntityType:eventType]) {
        if ([calendar.title caseInsensitiveCompare:title] == NSOrderedSame && calendar.type == type) {
            return calendar;
        }
    }
    return nil;
}

上面代码很简单,不用我再碎碎念了.

 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 中创 日历 时间
上一篇:iOS9中怎样在日历App中创建一个任意时间之前开始的提醒(三)
下一篇:iOS日历中怎样给一个事件添加多个提醒
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站