[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
2022-03-24 19:19:48
質問
Core Dataを使用して、Webサービス呼び出しの結果をローカルに持続させています。Webサービスは、例えば、"Cars"の完全なオブジェクトモデルを返します - 約2000台です(そして、私はWebサービスが1台またはすべての車より小さいものを返すようにできません。
次にアプリケーションを開いたとき、Core Dataの永続化されたコピーを更新するために、すべてのCarsのWebサービスを再度呼び出したいのですが、重複を防ぐために、最初にローカルキャッシュのすべてのデータをパージする必要があります。
管理オブジェクトコンテキスト内の特定のエンティティのすべてのインスタンス(例:タイプ "CAR"のすべてのエンティティ)をパージする素早い方法はありますか?または、それらを呼び出し、その結果を反復してそれぞれ削除し、その後保存する必要がありますか?
理想的には、entityがBlahであるところをすべて削除すると言えばいいのでしょう。
どのように解決するのですか?
iOS 9 以降
iOS 9 では、新しいクラスである
NSBatchDeleteRequest
この機能を使うと、述語にマッチしたオブジェクトをメモリに読み込むことなく、簡単に削除することができます。その使い方は以下の通りです。
スウィフト5
let fetchRequest: NSFetchRequest<NSFetchRequestResult> = NSFetchRequest(entityName: "Car")
let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)
do {
try myPersistentStoreCoordinator.execute(deleteRequest, with: myContext)
} catch let error as NSError {
// TODO: handle the error
}
オブジェクティブC
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Car"];
NSBatchDeleteRequest *delete = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];
NSError *deleteError = nil;
[myPersistentStoreCoordinator executeRequest:delete withContext:myContext error:&deleteError];
一括削除に関する詳しい情報は WWDC2015のセッション「"What's New in Core Data"」をご紹介します。 (14:10から)です。
iOS 8以前のバージョン。
すべて取得し、すべて削除します。
NSFetchRequest *allCars = [[NSFetchRequest alloc] init];
[allCars setEntity:[NSEntityDescription entityForName:@"Car" inManagedObjectContext:myContext]];
[allCars setIncludesPropertyValues:NO]; //only fetch the managedObjectID
NSError *error = nil;
NSArray *cars = [myContext executeFetchRequest:allCars error:&error];
[allCars release];
//error handling goes here
for (NSManagedObject *car in cars) {
[myContext deleteObject:car];
}
NSError *saveError = nil;
[myContext save:&saveError];
//more error handling here
関連
-
EXC_BAD_ACCESS (code=2, address=0x0)
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] iOS 13 のフルスクリーンでモーダルを表示する
-
[解決済み] UIViewに角丸をつける
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] iOS Simulatorでネットワークを無効にすることは可能ですか?
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。
-
[解決済み】Core Dataの全エントリーを削除/リセットしますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
クラッシュエラー libc++abi.dylib: NSException 型のキャッチできない例外で終了_allanGold のブログ - ProgrammerITS401
-
IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] 奇妙な不要なXcodeログを隠す
-
[解決済み] iOS 8 UITableViewのセパレータインセット0が機能しない件
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。
-
[解決済み】Core Dataの全エントリーを削除/リセットしますか?