我的目标是将一些受邀者添加到EKEvent
。我看着这样的其他问题,如这一个,但都不能不说是根本不可能添加EKParticipant
s到一个EKEvent
程序。我确实看到该attendees
属性为只读,但是我看到其他服务(例如Sunrise)在其移动应用中使用了该属性。
我有信心他们正在使用至少与EventKit进行部分集成的某些系统,因为他们正在从用户的iCal应用中提取日历。例如,从添加的Exchange帐户发送的邀请,也显然由Exchange服务发送,而不是Sunrise自己的邀请(将事件直接发布到Exchange或将事件发布到iCal的结果)。
此限制的任何解决方法都将非常有用-也许可以调用Exchange上的终结点来添加/删除受邀者?EventKit内部的解决方法?只要它不是私有的Apple API,我都会非常乐于尝试。
谢谢!
我想到了!
本质上,必须进入EKAttendee
继承自的类EKParticipant
。我是通过使用该NSClassFromString()
方法创建该类的泛型实例来实现的。
拥有与会者后,您可以使用setValue:ForKey:
函数设置属性。
最后,将您的EKAttendee
实例编译成一个数组,并将其设置为EKEvent
的attendees
属性。
我使用我的设备上的Exchange帐户对此进行了测试,它的工作原理非常有趣-邀请发送成功!
下面的代码是我现在用来设置事件参与者的代码。我的示例是创建新事件,但是对于现有事件,只需在上复制attendees
列表EKEvent
,然后对其进行修改并重新设置即可非常简单地完成。
//Create generic event info
EKEvent *event = [EKEvent eventWithEventStore:database];
event.title = @"TEST EVENT";
event.location = @"Test location";
event.notes = @"Example notes";
event.startDate = [NSDate date];
event.endDate = [[NSDate date] dateByAddingTimeInterval:(60 * 60)];
event.calendar = exchange;
//Do our super clever hack
NSMutableArray *attendees = [NSMutableArray new];
for (int i = 0; i < 5; i++) {
//Initialize a EKAttendee object, which is not accessible and inherits from EKParticipant
Class className = NSClassFromString(@"EKAttendee");
id attendee = [className new];
//Set the properties of this attendee using setValue:forKey:
[attendee setValue:@"Invitee" forKey:@"firstName"];
[attendee setValue:[NSString stringWithFormat:@"#%i", i + 1] forKey:@"lastName"];
[attendee setValue:@"[email protected]" forKey:@"emailAddress"];
//Add this attendee to a list so we can assign it to the event
[attendees addObject:attendee];
}
//Finally, add the invitees to the event
[event setValue:attendees forKey:@"attendees"];
//Save the event!
NSError *error = nil;
[database saveEvent:event span:EKSpanThisEvent error:&error];
if (error) {
NSLog(@"Save failed with error: %@", error);
} else {
NSLog(@"Success!");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句