私は再び CoreData と戦っており、あなたの助けが必要です :P
RSSリーダーを書いています。デザインは、libxml2 ライブラリを使用した Apple TopSongs の例に基づいています。
アプリケーションが起動したら、最後の更新がいつだったかを確認しています。1 時間以上前の場合は、現在の永続ストアを削除して、すべてを再度ダウンロードします。
if ([[NSFileManager defaultManager] fileExistsAtPath:self.persistentStorePath]) {
NSError *error = nil;
BOOL oldStoreRemovalSuccess = [[NSFileManager defaultManager] removeItemAtPath:self.persistentStorePath error:&error];
NSAssert3(oldStoreRemovalSuccess, @"Unhandled error adding persistent store in %s at line %d: %@", __FUNCTION__, __LINE__, [error localizedDescription]);
}
ローカルの sql ファイルが削除されたことがわかります。
現在、バックグラウンドでフィードから情報をダウンロードするためにいくつかの NSOperations を作成しています。
これまでのところ、すべてがうまく機能しています。
すべての RSS フィードと同様に、変更を確認して coreData を更新する更新ボタンがあります。手始めに、すべてを削除してすべてを再ダウンロードすることにしました(効率的ではありませんが、RSSフィードにはGUIDがなく、変更があったかどうかを判断するためにハッシュ関数を実装する必要があります)。
だから私がやっていることは、基本的に上記と同じコードを呼び出してストアを削除することです..すべてのRSSフィードを再度ダウンロードします(アプリケーションが最初にロードされたときと同じロジック)
テーブルをリロードしていますが、tableView で同じデータを表示できますが、すべてが変更されていません。
さらに進んで、コンテンツをダウンロードせずにストアを削除することにしました。
if ([[NSFileManager defaultManager] fileExistsAtPath:app.persistentStorePath]) {
NSError *error = nil;
BOOL oldStoreRemovalSuccess = [[NSFileManager defaultManager] removeItemAtPath:app.persistentStorePath error:&error];
NSAssert3(oldStoreRemovalSuccess, @"Unhandled error adding persistent store in %s at line %d: %@", __FUNCTION__, __LINE__, [error localizedDescription]);
}
[self.managedObjectContext save:&err];
[self.fetchedResultsController performFetch:&error];
[self.tableView reloadData]
空のテーブルが表示されると思っていましたが、データはまだそこにありました。
これはどのように可能ですか?ストアを削除し、データを再取得してリロードしました。
私は何を間違っていますか?