以下を使用してカレンダー変更通知に登録しました。
- (void) registerForLocalCalendarChanges
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localCalendarStoreChanged) name:EKEventStoreChangedNotification object:self.store ];
}
これは、ローカル カレンダーに変更が加えられたときに、次を呼び出す必要があります。
- (void) localCalendarStoreChanged
{
// This gets called when an event in store changes
// you have to go through the calendar to look for changes
// launch this in a thread of its own!
ashsysCalendarEventReporter *eventReport = [ashsysCalendarEventReporter new];
NSLog(@"Local Calendar Store Changed");
[NSThread detachNewThreadSelector:@selector(getCalendarEvents) toTarget:eventReport withObject:nil];
}
しかし...アプリを起動してバックグラウンドに送信すると、カレンダーのエントリを変更できますが、カレンダーのエントリを変更しても何も起こりません。アプリに戻ると起動します。しかし、もちろんそれが目的ではありません。
store は、ヘッダー ファイルで次のように定義されています。
@property (strong,nonatomic) EKEventStore *store;
更新...バックグラウンドフェッチで持っているものを表示するのを忘れていました。
これは didFinishLaunchingWithOptions にあります
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
これはアプリデリゲートにあります:
- (void) application:(UIApplication*) application performFetchWithCompletionHandler:(void (^) (UIBackgroundFetchResult))completionHandler
{
// UIBackgroundTaskIdentifier uploadCalInfo = [application beginBackgroundTaskWithExpirationHandler:nil];
NSLog(@"A fetch got called");
// ashsysCalendarEventReporter *eventReport = [ashsysCalendarEventReporter new];
// [eventReport getCalendarEvents];
// // [NSThread detachNewThreadSelector:@selector(getCalendarEvents) toTarget:eventReport withObject:nil];
// [application endBackgroundTask:uploadCalInfo];
completionHandler(UIBackgroundFetchResultNewData);
performFetch は、カレンダーにまったく関係のないランダムな時間のように見えるときに呼び出されます。バックグラウンド フェッチを起動しているものを見つける方法はありますか? いつもカレンダーですか?実際の実行はコメントアウトされています - それは正しいですか?
私は何が欠けていますか?