2017-04-21 3 views
0

私は晴れた例から取られたNSFetchedResultsControllerを持っています。それはうまく動作し、データベースからデータを正しくフェッチしますが、アプリケーションを終了してデータベースからレコードを削除しても、アプリケーションには引き続き表示され、アプリケーションを再インストールしなければ消滅させる方法はありません。これを引き起こす原因は誰にも分かりますか?私はキャッシュセットを持っていない、私は1つを設定し、起動時にそれを削除しようとしましたが、それは働いていません。 fetchedResultControllerのコードは次のとおりです。あなたは、私は間違いなくそれはNSFetchedResultsControllerのキャッシュに接続されていないことを伝えることができますを示してコンフィグからNSFetchedResultControllerキャッシュされた結果は消えません

lazy var fetchedResultController: NSFetchedResultsController<NSFetchRequestResult> = { 
    let fetchRequest:NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Events") 
    let managedObjectContext = (UIApplication.shared.delegate as! AppDelegate).managedObjectContext! 

    fetchRequest.predicate = NSPredicate(format: "completed != true") 
    //fetchRequest.predicate = NSPredicate(format: "text != ''") 

    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "createdAt", ascending: true)] 

    let resultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 

    resultsController.delegate = self; 

    return resultsController 
}() 

答えて

0

修正済みです。 MSSyncTableで問題が発生しました。これで、リフレッシュするたびにテーブルを強制的にパージして、値を正しく保持します。

self.table?.forcePurge(completion: nil) 
0

。コンストラクターメソッドでキャッシュ名を設定しないようにします。

Appleのドキュメント。

NSFetchedResultsControllerのインスタンスを初期化するときは、通常、 にキャッシュ名を指定します。 (あなたがキャッシュ名を指定しない場合、 コントローラは、キャッシュデータません。)

は、おそらくあなたは、データベースがサーバーから正常に更新を取得されていませんね。

+0

しかし、インターネットに接続していない状態でアプリを起動すると、以前に見たレコードにアクセスできるので、レコードが確実にデバイスに保存されます。私はまた、キャッシュを削除する関数にnilを渡そうとしましたが、違いはありませんでした。 –

関連する問題