Итерировать через объекты NSManagedObjectContext? - PullRequest
4 голосов
/ 28 апреля 2010

Я хочу перебрать все объекты в моем NSManagedObjectContext и обновить их вручную. Затем каждый управляемый объект должен быть обновлен. Какой лучший способ сделать это?

Ответы [ 3 ]

5 голосов
/ 28 апреля 2010

Теоретически вы можете выполнить итерацию по всем описаниям сущностей в вашей модели управляемых объектов, создать для них запрос на выборку без предикатов, затем выполнить цикл по всем возвращаемым объектам и выполнить некоторое обновление. Пример:

// Given some NSManagedObjectContext *context
NSManagedObjectModel *model = [[context persistentStoreCoordinator]
                               managedObjectModel];
for(NSEntityDescription *entity in [model entities]) {
    NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
    [request setEntity:entity];
    NSError *error;
    NSArray *results = [context executeFetchRequest:request error:&error];
    // Error-checking here...
    for(NSManagedObject *object in results) {
        // Do your updates here
    }
}

Обратите внимание, что вы можете приводить возвращаемые NSManagedObjects по мере необходимости, либо проверяя равенство классов (используя isKindOfClass: или связанный метод), либо выясняя, к какому классу относится текущая сущность (используя свойство managedObjectClassName в entity в в сочетании с методом NSClassWithName()).

4 голосов
/ 28 апреля 2010

Это похоже на очень сложный подход к проблеме. Если данные загружаются с неверными данными, то я бы настоятельно предложил бы исправить это во время импорта данных. Ответ Тима сработает для того, что вы делаете, но я сильно подозреваю, что вы ошибаетесь. Просматривать всю базу данных в поисках потенциально плохих данных очень неэффективно.

0 голосов
/ 25 июля 2011

Если управляемые объекты создаются с «неправильными данными», я бы проверил, чтобы вы установили значения по умолчанию в своей модели для всех свойств всех сущностей. Таким образом, вы можете быть уверены, что всякий раз, когда вы вставляете объект в ваш контекст, он будет содержать эти значения. Оттуда вы можете установить свойства на все, что вам нужно.

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