删除应用后,EKCalendar仍保留在日历应用中

时间:2015-09-18 09:47:12

标签: ios objective-c calendar ekevent ekeventstore

我正在使用一个使用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,这意味着我也在创建一个新日历。

这意味着,如果我删除应用程序并重新安装多次,我最终会得到一个相同日历的巨大列表,只有最新的应用程序可供我访问。删除应用程序时是否可以删除日历。或者我可以做些什么来访问之前创建的日历。

任何帮助都非常感激。

1 个答案:

答案 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合并:

  

与日历的完全同步将丢失此标识符。您应该有一个计划,通过缓存其他属性来处理标识符不再可读的日历。