私は単に解決策を理解できない問題を抱えています。
Core Data (xCode によって作成された AppDelegate の templatecode を使用) を使用するように構成されたアプリは、バックグラウンド スレッドで大量のデータをインポートします。問題は、大規模なインポートを実行した場合、UI スレッドで Core Data に加えたすべての変更が (時々) ストアに保存されないことです。インポートを実行しない場合、すべてのデータは正しく保存され、問題は一貫していません。これはオン/オフの問題ですが、問題の原因となっているインポートであることが判明しました。
私のスレッドコードは次のようになります(簡略化)
-(void)startSynchronization{
self.thread = [[NSThread alloc] initWithTarget:self selector:@selector(startSync:) object:nil];
[self.thread start];
}
-(void)startSync{
NSManagedObjectContext *importContext = [[NSManagedObjectContext alloc] init];
[importContext setPersistentStoreCoordinator:self.persistentStoreCoordinator];
[importContext setUndoManager:nil];
... import a lot of code and create thousands of core data entities..
}
persistentStoreCoordinator (PSC 以降) は、アプリの AppDelegate からの PSC であり、これが問題だと思います。複数のスレッドが個別の PSC を使用する必要があることを読みましたが、PSC を作成し、AppDelegate テンプレート コードで作成されたコア データ ファイルに割り当てるにはどうすればよいですか?
インポート後の Core Data の読み取りは正常に機能していますが、後で Core Data モデルの「ドキュメント」エンティティの 1 つをお気に入りとしてタグ付けすると、save on を呼び出しても、この変更はデータベースに書き込まれません。 AppDelegate からの私のコンテキスト。
グローバル PSC は、複数のコンテキスト、アプリ内の 1 つのコンテキスト、およびスレッド インポート コード内のインポート コンテキストを同期するために使用されていると思いましたか?
インポート コードと UI コードが同じ変更を認識し、ストアが一貫していることを確認するにはどうすればよいですか?
ありがとうございました
/ジェイコブ