エンティティ カテゴリに、サブクラス化されたクラスにカスタム メソッドを追加する単純なメソッドがありNSManagedObject
ます (サブクラス化が自動的に生成されるため、触れません)。
MOC からオブジェクトを削除し、コンテキストを保存するこのメソッドがあります。
+ (void)deleteWishlist:(Wishlist *)wishlist
inManagedObjectContext:(NSManagedObjectContext *)context
{
[context deleteObject:wishlist];
NSError *error;
if(![context save:&error]) {
NSLog(@"%@", error);
} else {
NSLog(@"Delete successful");
}
}
次のように、View Controller の 1 つからこれを呼び出します。
- (void)deleteWishlist:(Wishlist *)wishlist
{
if(wishlist) {
[Wishlist deleteWishlist:wishlist inManagedObjectContext:self.managedObjectContext];
}
}
UI イベント処理メソッド (デリゲートtableView: commitEditingStyle: forRowAtIndexPath:
メソッド) から呼び出されます。
これですべて動作しますが、オブジェクトを保存するのに時間がかかります...これがデフォルトの動作かどうかはわかりませんが、グラフから削除した後、すぐに永続ストレージに保存したいと考えています。保存するまで待たなければならないかどうかは気にしません。
iOS シミュレーターで、「停止」を押してアプリを再度ロードすると、ウィッシュリストがまだ残っています。ホームボタンを押すと、アプリはバックグラウンドモードになり、そこで保存されます...しかし、2回保存しているようです。正直なところ、最初は何をしているのかわかりません。
2013-05-29 00:45:14.819 App[29024:c07] [WishlistCDTVC setFetchedResultsController:] set
2013-05-29 00:45:14.820 App[29024:c07] [WishlistCDTVC performFetch] fetching all Wishlist (i.e., no predicate)
2013-05-29 00:45:15.755 App[29024:c07] Delete pressed
2013-05-29 00:45:16.666 App[29024:c07] NSManagedObjects did change.
2013-05-29 00:45:16.669 App[29024:c07] NSManagedContext did save.
2013-05-29 00:45:16.670 App[29024:c07] Delete successful
2013-05-29 00:45:19.119 App[29024:c07] NSManagedContext did save.
私がしたこと:ウィッシュリストVCをロードし、スワイプして削除し、確認すると、「削除が押されました」と表示されました。コンテキストからオブジェクトを削除し、それを保存します (ただし、明らかにここにはありません)。次に、削除が成功したことを示します (したがってエラーはありません)。次に、ホーム ボタンを押すと、最後の「保存」行がログに記録され、最終的に永続ストレージに保存されます。では、なぜ真ん中の人は節約しないのでしょうか?