1

Core Data がオブジェクトを永続化するのを防ぐことは可能ですか?

プロパティを持つNSManagedObjectサブクラスがあるとしましょう。BOOLisTemporary

したがって、コンテキストで保存が呼び出されると、オブジェクトのチェックを行います。

if (self.isTemporary) {

 // Do not save

} else {

// Save this object

}

編集:問題の背景情報

うーん、私の問題を明確にするために、オブジェクトを作成します。既に存在する場合はそれをフェッチし、存在しない場合は挿入し、オブジェクトの一時フラグをYESに設定します。この段階では、ユーザーが保存またはキャンセル アクションを実行するかどうかが明確でないため、フラグを設定しました。彼がセーブしたら、フラグを一時的に NO に設定します。彼がキャンセルした場合、一時フラグが YES の場合、オブジェクトを削除します。

ここまでは順調ですが、その間、バックグラウンドでコア データの保存操作がバックグラウンドで発生する可能性があり、これらのオブジェクトを永続化したくありませんが (一時的なものであるため)、これらのオブジェクトを永続化します。したがって、運が悪くてアプリが強制終了された場合、一時フラグが YES に設定された不要なオブジェクトが作成される可能性があります。1 つのオプションは、アプリの起動時にクリーン操作を実行して、一時フラグが YES のオブジェクトを削除することです。しかし、それらのオブジェクトを保持しなければ、すべてがずっと簡単になります。

4

2 に答える 2

1

正しい、それはそれができる方法です。

if (self.isTemporary && self.managedObjectContext) {
   [self.managedObjectContext delete:self];
}

managedObjectContexta のNSManagedObjectは削除されると nil になることに注意してください。

于 2013-07-04T15:57:42.727 に答える
0

Core Dataを永続化させたくManagedObjectない場合、つまり、オブジェクトをファイルに書き込みたくない場合はManagedObject、次の方法でオブジェクトを初期化することでこれを実現できます。

@implementation MyManagedObject

- (id) init
{
    NSEntityDescription* entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
    self = [super initWithEntity:entity insertIntoManagedObjectContext:Nil];
}

@end

オブジェクトを保存する場合は、次の方法で保存します。

[managedObjectContext insertObject:myManagedObject];
NSError* error;
if ([managedObjectContext save:&error]) {
    NSLog(@"Successfully saveed ManagedObject!");                                                    
} else {
    NSLog(@"Failed to save ManagedObject!");
}

お役に立てれば!

于 2014-07-22T07:26:11.760 に答える