2

アプリがバックグラウンド モードになったときに、アプリが JSON オブジェクトをダウンロードしています。アプリはそれらをコア データ エンティティに変換します。私が実行している問題は、これらのコア データ エンティティの管理オブジェクト コンテキストをメインの管理オブジェクト コンテキストとマージする必要があることです。

これらの変更をマージする方法は、通知を使用することです。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextHasChanged:) name:NSManagedObjectContextDidSaveNotification object:nil];


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

    NSLog(@"received notification with object: %@",[[notification object] description]);
    if ([notification object] == [AppUser managedObjectContext]) return;

    if (![NSThread isMainThread]) {
        [self performSelectorOnMainThread:@selector(contextHasChanged:) withObject:notification waitUntilDone:YES];
        return;
    }

    [[AppUser managedObjectContext] mergeChangesFromContextDidSaveNotification:notification];
}

何らかの理由で、バックグラウンドでの実行中にコードがこれらの通知を受け取りません。バックグラウンド モードで実行されている間、アプリは引き続き通知を生成しますか? それとも、そのような通知に登録する場所/時期の場所が間違っているのでしょうか?

明確にしていただきありがとうございます!

4

3 に答える 3

2

アプリは、メインまたはバックグラウンドで通知を送信し続けます。オブザーバーの追加および通知の投稿中にオブザーバーが解放されないように注意する必要があります。私はこれを読んで実装にいくつかのミスがあるかもしれないと思います

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/NSManagedObjectContext.html

于 2012-05-02T15:17:35.563 に答える
2

ホームボタンを押すと、アプリは一時停止モードになります。アイコンをタップして「ウェイクアップ」するまで、上記の通知は処理されません。

アプリが引き続きタスクを実行できるようにするには、バックグラウンドタスクの完了をリクエストする必要があります。その後、OSは、アプリを一時停止する前に、アプリが実行しているタスクを完了するために最大600秒(10分)を与えます。

詳細については、https ://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW3をご覧ください。

具体的には、上記のリンクで「バックグラウンド実行とマルチタスク」を探してください。

于 2012-05-02T15:32:08.600 に答える