EventKit 权限
EventKit permission
我希望我的 EventKit
在尝试将事件添加到日历但访问被拒绝时请求对日历的许可。它只询问第一次使用该应用程序,如果您在设置中拒绝访问,它不会提示用户再次授予访问权限。请帮忙。
额外加分:我还希望它检查日历中是否已存在该事件,如果存在,请对其进行编辑。如有任何帮助,我们将不胜感激!!
这是我的代码:
func addToCalendar(){
let eventStore = EKEventStore()
let startDate = NSDate()
let endDate = startDate.dateByAddingTimeInterval(60 * 60) // One hour
if (EKEventStore.authorizationStatusForEntityType(.Event) != EKAuthorizationStatus.Authorized) {
eventStore.requestAccessToEntityType(.Event, completion: {
granted, error in
self.createEvent(eventStore, title: "\(self.meal.text!)", startDate: startDate, endDate: endDate)
})
} else {
createEvent(eventStore, title: "\(self.meal.text!)", startDate: startDate, endDate: endDate)
}
}
func createEvent(eventStore: EKEventStore, title: String, startDate: NSDate, endDate: NSDate) {
let event = EKEvent(eventStore: eventStore)
event.title = title
event.startDate = startDate
event.endDate = endDate
event.calendar = eventStore.defaultCalendarForNewEvents
event.notes = "\(self.Recipe.text!) - See Meal Planning on Listacular"
do {
try eventStore.saveEvent(event, span: .ThisEvent)
savedEventId = event.eventIdentifier
} catch {
print("Denied")
}
}
您不能直接提示用户再次授予访问权限。但是您可以向用户显示有关权限状态的弹出窗口,并且可以请求从设备设置中启用权限。这是 objective-c
中的示例
EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController* alertController=[UIAlertController alertControllerWithTitle:@"Access to Calendar is Restricted" message:@"To re-enable, please go to Settings and turn on Calendar Settings for this app else Continue to create party without saving it to your Calendar" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"Continue" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action)
{
[self addEvent:store]; //your method
}];
[alertController addAction:actionOK];
[alertController addAction:[UIAlertAction actionWithTitle:kSETTINGS style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}]];
[self presentViewController:alertController animated:NO completion:nil];
});
}
else
{
[self addEvent:store]; // your method
}
}];
您可以使用 EKEventStore 的此方法检查特定事件的存储。您需要传递事件标识符。
- (nullable EKEvent *)eventWithIdentifier:(NSString *)identifier;
我希望我的 EventKit
在尝试将事件添加到日历但访问被拒绝时请求对日历的许可。它只询问第一次使用该应用程序,如果您在设置中拒绝访问,它不会提示用户再次授予访问权限。请帮忙。
额外加分:我还希望它检查日历中是否已存在该事件,如果存在,请对其进行编辑。如有任何帮助,我们将不胜感激!!
这是我的代码:
func addToCalendar(){
let eventStore = EKEventStore()
let startDate = NSDate()
let endDate = startDate.dateByAddingTimeInterval(60 * 60) // One hour
if (EKEventStore.authorizationStatusForEntityType(.Event) != EKAuthorizationStatus.Authorized) {
eventStore.requestAccessToEntityType(.Event, completion: {
granted, error in
self.createEvent(eventStore, title: "\(self.meal.text!)", startDate: startDate, endDate: endDate)
})
} else {
createEvent(eventStore, title: "\(self.meal.text!)", startDate: startDate, endDate: endDate)
}
}
func createEvent(eventStore: EKEventStore, title: String, startDate: NSDate, endDate: NSDate) {
let event = EKEvent(eventStore: eventStore)
event.title = title
event.startDate = startDate
event.endDate = endDate
event.calendar = eventStore.defaultCalendarForNewEvents
event.notes = "\(self.Recipe.text!) - See Meal Planning on Listacular"
do {
try eventStore.saveEvent(event, span: .ThisEvent)
savedEventId = event.eventIdentifier
} catch {
print("Denied")
}
}
您不能直接提示用户再次授予访问权限。但是您可以向用户显示有关权限状态的弹出窗口,并且可以请求从设备设置中启用权限。这是 objective-c
中的示例 EKEventStore *store = [EKEventStore new];
[store requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (!granted)
{
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController* alertController=[UIAlertController alertControllerWithTitle:@"Access to Calendar is Restricted" message:@"To re-enable, please go to Settings and turn on Calendar Settings for this app else Continue to create party without saving it to your Calendar" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *actionOK = [UIAlertAction actionWithTitle:@"Continue" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action)
{
[self addEvent:store]; //your method
}];
[alertController addAction:actionOK];
[alertController addAction:[UIAlertAction actionWithTitle:kSETTINGS style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action)
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}]];
[self presentViewController:alertController animated:NO completion:nil];
});
}
else
{
[self addEvent:store]; // your method
}
}];
您可以使用 EKEventStore 的此方法检查特定事件的存储。您需要传递事件标识符。
- (nullable EKEvent *)eventWithIdentifier:(NSString *)identifier;