3

1 つの質問と 1 つの問題: 次のコードがあります。

- (void) registerForLocalCalendarChanges
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localCalendarStoreChanged) name:EKEventStoreChangedNotification object:store ];

}

- (void) localCalendarStoreChanged
{
    // This gets call when an event in store changes
    // you have to go through the calendar to look for changes
    [self getCalendarEvents];
}

これらのメソッドは、メソッド getCalendarEvents (コールバック内) を含む CalendarEventReporter と呼ばれるクラス/オブジェクトにあります。

2 つのこと: 1) アプリがバックグラウンドにある場合、コールバックは実行されません。それをさせる方法はありますか?2) アプリをフォアグラウンドに戻すと (デバイスのカレンダーを変更した後)、デバッグ ウィンドウまたはデバイスにエラー メッセージが表示されずにアプリがクラッシュします。私の推測では、コールバックを含む CalendarEventReporter オブジェクトがガベージ コレクションされていると思われます。それは可能ですか?クラッシュの原因について他に考えられることはありますか? または、エラーメッセージを表示する方法は?

4

3 に答える 3

1

最初の質問に答えるには、https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.htmlをご覧ください。

バックグラウンドでコードを実行するために私がしたことは、次のようなことです

.h ファイル内

UIBackgroundTaskIdentifier backgroundUploadTask;

.m ファイル内

-(void) functionYouWantToRunInTheBackground
{    
    self.backgroundUploadTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
}];
//code to do something
}

-(void) endBackgroundUpdateTask
{
    [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUploadTask];
    self.backgroundUploadTask = UIBackgroundTaskInvalid;
}

上記のコードは、客観的な c - beginBackgroundTaskWithExpirationHandler の適切な使用からほとんど学びました

2 番目の質問については、アプリをフォアグラウンドに戻したときにコードが実行されるブレークポイントを設定する必要があります。十分なコードや情報が提供されない場合、アプリがクラッシュする理由は誰にもわかりません。

于 2014-06-23T15:02:10.033 に答える