NSManagedObject:isUpdated和isInserted

时间:2010-02-16 19:08:52

标签: iphone nsmanagedobject

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

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

如果我使用例如:

创建一个新对象
[NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:managedObjectContext]

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

这是有效的,但我想检查一下,如果使用 new 数据修改了对象。

无论对象是否已被更改,

isInserted都将返回FALSE,只关注是否已插入...

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

感谢!!!

2 个答案:

答案 0 :(得分:15)

我不确定我完全理解你的问题,但是,如果你想检查你是否使用未保存的 new NSManagedObject,你可以通过为NSManagedObject编写一个小类来做到这一点: / p>

@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方法检查是否已保存。

答案 1 :(得分:1)

isInserted指示对象是否为“new”(新插入NSManagedObjectContext)。我认为你需要的是方法hasChanges(它在NSManagedObject上,也在NSManagedObjectContext上)......

BOOL someChangeHappendToObject = [myObject hasChanges];

结帐NSManagedObject hasChanges documentation