9

我使用 NSManagedObject 类的 isUpdated 实例方法跟踪我的“对象”。

当我修改现有对象时,它可以工作。

如果我使用例如创建一个新对象:

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

我不能使用 isUpdated,我必须使用 isInserted。

这有效,但我想检查的是,如果对象已用数据进行了修改。

无论对象是否已更改,isInserted 都将返回 FALSE,它只关心是否已插入...

我能用什么?我可以跟踪对象属性的初始状态,但我更喜欢 isUpdated 方法。

谢谢!!!

河。

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 回答