2017-02-23 66 views
0

如何知道EKEvent是否被添加或删除?这样我可以安排事件通知。否则对于已删除的事件,它也会安排通知。任何帮助?如何检测事件存储更改以及更改是什么?来自EKEventStoreChangedNotification

-(void)storeChanged:(NSNotification*)notification{ 

    EKEventStore *ekEventStore = notification.object; 

    NSDate *now = [NSDate date]; 
    NSDateComponents *offsetComponents = [NSDateComponents new]; 
    [offsetComponents setDay:0]; 
    [offsetComponents setMonth:4]; 
    [offsetComponents setYear:0]; 
    NSDate *endDate = [[NSCalendar currentCalendar] dateByAddingComponents:offsetComponents toDate:now options:0]; 

    NSArray *ekEventStoreChangedObjectIDArray = [notification.userInfo objectForKey:@"EKEventStoreChangedObjectIDsUserInfoKey"]; 
    NSPredicate *predicate = [ekEventStore predicateForEventsWithStartDate:now 
                     endDate:endDate 
                    calendars:nil]; 
    // Loop through all events in range 
    [ekEventStore enumerateEventsMatchingPredicate:predicate usingBlock:^(EKEvent *ekEvent, BOOL *stop) { 
     // Check this event against each ekObjectID in notification 
     [ekEventStoreChangedObjectIDArray enumerateObjectsUsingBlock:^(NSString *ekEventStoreChangedObjectID, NSUInteger idx, BOOL *stop) { 
      NSObject *ekObjectID = [(NSManagedObject *)ekEvent objectID]; 
      if ([ekEventStoreChangedObjectID isEqual:ekObjectID]) { 
       // Log the event we found and stop (each event should only exist once in store) 
       NSLog(@"calendarChanged(): Event Changed: title:%@", ekEvent.title); 

       NSLog(@"%@",ekEvent); 

       NSInteger total = [[[UIApplication sharedApplication] scheduledLocalNotifications]count]; 
       if (total == 64) { 
        [self cancelLastNotification]; 
       } 

       NSArray *newArray = [[NSArray alloc]initWithObjects:ekEvent, nil]; 
       [self scheduleNotificationForCalendarEvents:NO andEvents:newArray]; 

       *stop = YES; 
      } 
     }]; 
    }]; 

} 

回答

0

如果使用refresh属性,它会返回false时,它已被删除,而真正的,如果你仍然可以使用它。

相关问题