2015-09-18 43 views
0

我正在使用使用EKEventStore和EKCalendar的应用程序。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

到现在为止我没有发现其他的解决方案,以便: 让你以前的日历,你可以按名称这样的搜索:

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合并,则可以使用此ID:

与日历完全同步将失去此标识符。您应该制定计划来处理标识符不再可通过缓存其他属性获取的日历。

相关问题