9

NSManagedObject クラスの isUpdated インスタンス メソッドを使用して、「オブジェクト」を追跡します。

既存のオブジェクトを変更しているとき、それは機能します。

たとえば、次を使用して新しいオブジェクトを作成するとします。

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:managedObjectContext]

isUpdated を使用できません。isInserted を使用する必要があります。

これは機能しますが、オブジェクトが新しいデータで変更されているかどうかを確認したいです。

isInserted は、オブジェクトが変更されているかどうかに関係なく FALSE を返します。挿入されているかどうかにのみ注意してください ...

何を使えますか?オブジェクト プロパティの初期状態を追跡することはできますが、isUpdated アプローチを使用したいと思います。

ありがとう!!!

r.

4

2 に答える 2

17

あなたの質問を完全に理解しているかどうかはわかりませんが、保存されていない新しいNSManagedObject を使用しているかどうかを確認したい場合は、NSManagedObject の小さなカテゴリを作成することで確認できます。

@interface NSManagedObject(Utility)

/**
 Returns YES if this managed object is new and has not yet been saved in the persistent store.
 */
- (BOOL)isNew;

@end

@implementation NSManagedObject(Utility)

- (BOOL)isNew {
    NSDictionary *vals = [self committedValuesForKeys:nil];
    return [vals count] == 0;
}

@end

以下を使用して新しい管理対象オブジェクトを作成した場合:

[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:managedObjectContext]

メソッドを使用して、-isNew保存されているかどうかを確認できます。

于 2010-08-04T10:43:37.683 に答える
1

isInserted は、オブジェクトが「新しい」(NSManagedObjectContext に新しく挿入された) かどうかを示します。必要なのはメソッド hasChanges だと思います(NSManagedObjectとNSManagedObjectContextにあります)...

BOOL someChangeHappendToObject = [myObject hasChanges];

チェックアウトNSManagedObject hasChanges ドキュメント

于 2014-08-09T10:40:57.450 に答える