reb*_*o95 20 exchange-server objective-c ios eventkit ekevent
我的目标是添加一些被邀请者EKEvent.我已经研究过像这样的其他问题,比如这个问题,但是所有人都说EKParticipant以EKEvent编程方式添加s 基本上是不可能的.我确实看到该attendees属性是只读的,但我看到其他服务,如Sunrise在他们的移动应用程序中使用它.
我相信他们正在使用一些至少部分与EventKit集成的系统,因为他们正在从用户的iCal应用程序中提取日历.例如,从添加的Exchange帐户发送的邀请也由Exchange服务明确发送,而不是Sunrise自己的邀请(将事件直接发布到Exchange或将其发布到iCal).
任何解决方法此限制都非常有用 - 可能是Exchange上可以调用添加/删除被邀请者的端点?EventKit内部的解决方法?只要它不是私有的Apple API,我就会非常乐意尝试它.
谢谢!
reb*_*o95 13
我想到了!
从本质上讲,必须进入EKAttendee继承自的类EKParticipant.我通过使用该NSClassFromString()方法创建该类的通用实例来完成此操作.
有了与会者后,您可以使用该setValue:ForKey:功能设置属性.
最后,将EKAttendee实例编译为数组,并将其设置为EKEvents 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:@"test@email.com" 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!");
}
Run Code Online (Sandbox Code Playgroud)
Swift版本的rebello95的解决方案.我可以确认它有点像魅力!我玩了firstName和lastName属性,但它们似乎根本不重要,所以我把它们排除在我的例子之外.只有emailAddress与您的联系人列表匹配的事项才能显示全名,例如本机日历应用程序.
private func createEventWithAttendees() {
let eventStore = EKEventStore()
let calendars = eventStore.calendarsForEntityType(.Event)
let event = EKEvent(eventStore: eventStore)
event.title = "TEST EVENT"
event.startDate = NSDate()
event.endDate = NSDate().dateByAddingTimeInterval(60 * 60)
event.calendar = calendars[0]
var attendees = [EKParticipant]()
for i in 0 ..< 5 {
if let attendee = createParticipant(email: "test\(i)@email.com") {
attendees.append(attendee)
}
}
event.setValue(attendees, forKey: "attendees")
try! eventStore.saveEvent(event, span: .ThisEvent)
}
private func createParticipant(email email: String) -> EKParticipant? {
let clazz: AnyClass? = NSClassFromString("EKAttendee")
if let type = clazz as? NSObject.Type {
let attendee = type.init()
attendee.setValue(email, forKey: "emailAddress")
return attendee as? EKParticipant
}
return nil
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3580 次 |
| 最近记录: |