我正在使用一个使用EKEventStore和EKCalendar的应用程序。
EKEventStore是静态的:
static EKEventStore *eventStore = nil;
然后我使用以下方法查看用户是否允许我访问他们的日历。
- (void)requestAccess:(void (^)(BOOL granted, NSError *error))callback;
{
if (eventStore == nil) {
eventStore = [[EKEventStore alloc] init];
}
// request permissions
[eventStore requestAccessToEntityType:EKEntityTypeEvent completion:callback];
//EKCalendar *calendar = nil;
NSString *calendarIdentifier = [[NSUserDefaults standardUserDefaults] valueForKey:calendarIdentifer];
if (calendarIdentifier) {
self.calendar = [self retrieveCalendar];
}
}
在此之后,我可以创建一个新日历并保存我的活动。但是,如果我删除该应用程序,日历将保留在日历应用程序中。当我运行应用程序时,我正在创建一个新的EKEventStore,这意味着我也在创建一个新日历。
这意味着,如果我删除应用程序并重新安装多次,我最终会得到一个相同日历的巨大列表,只有最新的应用程序可供我访问。删除应用程序时是否可以删除日历。或者我可以做些什么来访问之前创建的日历。
任何帮助都非常感激。
答案 0 :(得分:0)
直到现在我还没有找到其他解决办法: 要获得以前的日历,您可以按照以下名称进行搜索:
EKEventStore *eventDB = [[EKEventStore alloc] init];
NSArray *calendarEvents = [eventDB calendarsForEntityType:EKEntityTypeEvent];
NSArray *calendarReminder = [eventDB calendarsForEntityType:EKEntityTypeReminder];
NSMutableArray *calendars = [NSMutableArray arrayWithArray:calendarEvents];
[calendars addObjectsFromArray:calendarReminder];
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSString *typeString = @"";
for (EKCalendar *thisCalendar in calendars)
if([thisCalendar.title isEqualToString:@"YourcalendarName"])
// your code
但是用户可以更改日历名称,这是有风险的,因此您可以购买创建日历时可以存储的ID,但是如果您与iCloud合并:
与日历的完全同步将丢失此标识符。您应该有一个计划,通过缓存其他属性来处理标识符不再可读的日历。