1

ユーザーがアプリにログインすると、バックグラウンド スレッドでサーバーからデータをダウンロードします。その managedObjectContext をメインの managedobjectcontext の子として設定するシングルトンがあります。

-(NSManagedObjectContext*) context{
    if(!_context){
        NSManagedObjectContext *child = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
        [child setParentContext:[MyAppDelegate delegate].managedObjectContext];
        _context = child;
    }
    return _context;
}

ユーザーがログアウトしたら、メインの管理オブジェクトコンテキストをロックする PersistenceStoreCoordinator sqllite ファイルを削除します

-(void)onLogout{
    NSError *error = nil;

    if ([_persistentStoreCoordinator persistentStores] == nil)
        return;

    [self.managedObjectContext reset];
    [self.managedObjectContext lock];

    NSPersistentStore *store = [[self.persistentStoreCoordinator persistentStores] lastObject];

    if (![self.persistentStoreCoordinator removePersistentStore:store error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }  

    // Delete file
    if ([[NSFileManager defaultManager] fileExistsAtPath:store.URL.path]) {
         if (![[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        } 
    }

    _persistentStoreCoordinator = nil;

    _persistentStoreCoordinator = [self persistentStoreCoordinator];
    [self.managedObjectContext unlock];
    self.agendaLoader = nil;
    _agendaLoader = self.agendaLoader;
}

同じシミュレーター セッションで (アプリを停止せずに) ログアウト/ログインすると、シングルトンの save メソッドが次のエラーでクラッシュします。

This NSPersistentStoreCoordinator has no persistent stores.  It cannot perform a save operation.'

しかし、ログアウト/アプリを停止/アプリを再起動/ログインすると、問題なく動作します。

ログアウト時に子の managedobjectcontext をリセットしようとしましたが、結果はありませんでした..

すべての管理対象オブジェクト コンテキストをリセットし、storecoordinator ファイルを削除し、すべてのコア データ スタックを「再起動」するためのベスト プラクティスはありますか?

ご協力いただきありがとうございます。

4

1 に答える 1

0

通知が最適なオプションだと思います。管理対象オブジェクト コンテキストへの参照を保持する各ビュー コントローラーまたはオブジェクト、および管理対象オブジェクトは、リセットのカスタム通知を監視する必要があります。それらはすべて無効になるためです。

永続ストア ファイルを削除する必要がある理由は何ですか? プライバシーやセキュリティ上の理由ですか?それがデータの一時的な性質のものである場合はどうなりますか?

于 2012-06-21T06:55:18.107 に答える