NSManagedObject: isUpdated и isInserted - PullRequest
       2

NSManagedObject: isUpdated и isInserted

8 голосов
/ 16 февраля 2010

Я отслеживаю свои «объекты», используя метод экземпляра isUpdated класса NSManagedObject.

Когда я изменяю существующий объект, он работает.

Если я создаю новый объект, используя, например:

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

Я не могу использовать isUpdated, я должен использовать isInserted.

Это работает, но я хочу проверить, был ли объект изменен с новыми данными.

isInserted вернет FALSE независимо от того, был ли объект изменен или нет, он заботится только о том, вставлен он или нет ...

что я могу использовать? Я могу отслеживать начальное состояние свойств объекта, но я бы предпочел подход isUpdated.

спасибо !!!

г.

Ответы [ 2 ]

15 голосов
/ 04 августа 2010

Я не уверен, что полностью понимаю ваш вопрос, однако, если вы хотите проверить, работает ли ваш несохраненный новый 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, чтобы проверить, был ли он сохранен или нет.

1 голос
/ 09 августа 2014

isInserted указывает, является ли объект «новым» (недавно вставленный в NSManagedObjectContext). Я думаю, что вам нужен метод hasChanges (он находится на NSManagedObject, а также на NSManagedObjectContext) ...

BOOL someChangeHappendToObject = [myObject hasChanges];

оформить заказ NSManagedObject имеет документацию по изменениям

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...