EKEventStoreChangedNotification不会触发

所以我目前正在玩EventKit,并试图让EKEventStoreChangedNotification触发,当我添加/修改/删除本机日历应用程序中的日历条目,但在请求访问日历的权限后,确认我已被授权和签名用于通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeChanged:) name:EKEventStoreChangedNotification object:nil]; 

select器从不被调用。 还尝试了块语法,这也不起作用。

所以我想我做错了,发现这个示例代码 ,它应该有工作通知,但即使在拉动该项目,并确保addObserver行被调用,我一直无法看到select器被调用当我修改日历。

任何想法如何进一步debugging?

确保你的EKEventStore没有被释放。 例如,将其分配给一个强大的属性。

在股票日历应用中进行编辑时,以下应用会logging一个string:

 #import <EventKit/EventKit.h> @interface AppDelegate : UIResponder<UIApplicationDelegate> @property (strong, nonatomic) EKEventStore *eventStore; @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.eventStore = [[EKEventStore alloc] init]; [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if (granted) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventStoreChangedNotification:) name:EKEventStoreChangedNotification object:nil]; } }]; return YES; } - (void)eventStoreChangedNotification:(NSNotification *)notification { NSLog(@"Event store changed"); } @end 

您必须确保EKEventStore对象保留在内存中才能使用。

这些scheme不适用于ARC:

 @property (weak, nonatomic) EKEventStore *eventStore; self.eventStore = [[EKEventStore alloc] init]; 

 EKEventStore *eventStore = [[EKEventStore alloc] init]; 

这个场景将与ARC一起工作

 @property (strong, nonatomic) EKEventStore *eventStore; self.eventStore = [[EKEventStore alloc] init]; [self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) { if (granted) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(eventStoreChangedNotification:) name:EKEventStoreChangedNotification object:nil]; } }]; 

我认为你需要添加eventStore作为对象。 检查这个例子。 为我工作。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeChanged:) name:EKEventStoreChangedNotification object:eventStore]; 

观察对日历数据库的外部更改