有没有办法从自定义应用程序中将iCal事件添加到iPhone日历?
我想在Swift中找到第一个带有"单"线表达式EKSource的类型EKSourceType.Local.这是我目前拥有的:
let eventSourceForLocal =
eventStore.sources[eventStore.sources.map({ $0.sourceType })
.indexOf(EKSourceType.Local)!]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法(例如没有映射和/或通用版本find)?
我正在尝试确定哪个EKEvent's与会者(EKPartipants)是当前用户.在iOS6中,EKParticipant公开名为isCurrentUser的属性
这应该是准确提供这些信息.不幸的是,每次我查找一个EKParticipant's isCurrentUser属性时,它都会返回NO,即使情况显然不是这样.
任何帮助将非常感激!
更新的发现:
如果您查看活动组织者,isCurrentUser == YES如果您是组织者,则会正确返回.但是,如果您从参加者集中检索自己,则会返回isCurrentUser == NO.
示例控制台输出,其中两个不同的EKParticipant对象引用具有相同电子邮件地址的同一个人:
(lldb) po [ekEvent.attendees objectAtIndex:3]
$20 = 0x208c1220 EKAttendee <0x208c1220> {UUID = CCD17C5E-FCB5-4BC9-8D9E-7E957B20025D;
name= ----- -----; email = --------wa@me.com; status = 2; role = 0; type = 1}
(lldb) print [(EKParticipant *)[ekEvent.attendees objectAtIndex:3] isCurrentUser]
(BOOL) $15 = NO
(lldb) po ekEvent.organizer
$19 = 0x20b720e0 EKOrganizer <0x20b720e0> {UUID = FD0E434D-2C9F-4A6E-98DC-
7FA6F27C3D1E; name = ----- -----; email = --------wa@me.com; …Run Code Online (Sandbox Code Playgroud) 我一直假设Google代表可以通过iCal和calendar.app查看,但我们的开发人员无法通过日历框架或EventKit查看.
这改变了吗?
在我的iPhone应用程序代码中,任何示例代码都会告诉我如何:
任何其他更好的建议如何在模拟器上掩盖管理这些测试数据将是好的.这里的背景是我在谈论日历中的测试数据(例如使用事件工具包),所以当我部署到我的设备时,我不希望应用程序将日历项目放入我的iPhone(对不起 - 只有1个人iPhone在这里).
EKCalendar该类的文档为该calendarIdentifier属性声明了这一点:
与日历完全同步将丢失此标识符.您应该有一个计划,通过缓存其他属性来处理标识符不再可读的日历.
什么时候发生"完全同步"以及哪些属性可能会发生变化calendarIdentifier?
我的目标是添加一些被邀请者EKEvent.我已经研究过像这样的其他问题,比如这个问题,但是所有人都说EKParticipant以EKEvent编程方式添加s 基本上是不可能的.我确实看到该attendees属性是只读的,但我看到其他服务,如Sunrise在他们的移动应用程序中使用它.
我相信他们正在使用一些至少部分与EventKit集成的系统,因为他们正在从用户的iCal应用程序中提取日历.例如,从添加的Exchange帐户发送的邀请也由Exchange服务明确发送,而不是Sunrise自己的邀请(将事件直接发布到Exchange或将其发布到iCal).
任何解决方法此限制都非常有用 - 可能是Exchange上可以调用添加/删除被邀请者的端点?EventKit内部的解决方法?只要它不是私有的Apple API,我就会非常乐意尝试它.
谢谢!
我想以编程方式将参与者添加到iPhone上的EKEvent.
EKParticipant的类引用声明"您不直接创建EKParticipant对象.将与会者发送到EKEvent对象以获取EKParticipant对象的数组.".
EKEvent的类引用声明"与会者"成员(NSArray)是"与事件关联的与会者,作为EKParticipant对象的数组.(只读)"
看起来像鸡蛋和鸡蛋的场景 - 如果参与者成员a.)是"只读"并且b.包含无法直接创建的对象,那么"如何将参与者发送给EKEvent对象"?
在我正在开发的应用程序中,用户和用户日历之间存在交互,就像在许多应用程序中发生的那样,非常标准的东西.它正常工作,直到我升级到ios 6.我现在面临"这个应用程序无法访问您的日历.当我尝试执行相同的日历功能但我的应用程序执行时,您可以在隐私设置中启用访问"对话框未出现在设备日历隐私设置中.是否需要使用一些新的api才能要求用户授予访问权限?
非常感谢帮助我解决这个问题谁能提供帮助.
海兰
我有这个代码用于向日历添加事件,但它没有添加.
-(void)event
{
EKEventStore *eventStore = [[EKEventStore alloc] init];
EKEvent *event = [EKEvent eventWithEventStore:eventStore];
event.title = @"Event";
NSDateFormatter *tempFormatter = [[NSDateFormatter alloc]init];
[tempFormatter setDateFormat:@"dd.MM.yyyy HH:mm"];
NSString *dateandtime =[NSString stringWithFormat:@"%@%@%@",datestring,@" ",starttimestring];
NSString *dateandtimeend =[NSString stringWithFormat:@"%@%@%@",datestring,@" ",endtimestring];
event.startDate = [tempFormatter dateFromString:dateandtime];
event.endDate = [tempFormatter dateFromString:dateandtimeend];
[event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -60.0f * 24]];
[event addAlarm:[EKAlarm alarmWithRelativeOffset:60.0f * -15.0f]];
[event setCalendar:[eventStore defaultCalendarForNewEvents]];
NSError *err;
[eventStore saveEvent:event span:EKSpanThisEvent error:&err];
}
Run Code Online (Sandbox Code Playgroud)
从XML我得到这种格式的日期和时间:
日期字符串:28.10.2012
starttimestring:15:00