2015-11-09 1 views
0

У меня вопрос, что лучше всего использовать при использовании Магической записи для изменения какого-либо атрибута для всех записей.Редактировать все объекты в контексте

Только способ, который я нашел, - это получить все объекты в блоке сохранения и после перечисления по одному. Есть ли лучшее решение?

[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
     NSArray * devices = [CDDevice MR_findByAttribute:@"primary" withValue:@"YES" inContext:localContext]; 

     [devices enumerateObjectsUsingBlock:^(CDDevice * device, NSUInteger idx, BOOL * _Nonnull stop) { 
      CDDevice * tmpDevice = [device MR_inContext:localContext]; 
      tmpDevice.primary = @(0); 
     }]; 
    } completion:^(BOOL contextDidSave, NSError *error) { 
     ; 
    }]; 

Что-то вроде

[CDDevice MR_ChangeAtribute:"primary" toValue:@(0)]; 

Это изменение для всех CDDevice записей изменить первичный ДА.

ответ

0

Это основной способ передачи данных. Извлечь, изменить, повторить.

Однако, если у вас их много, вы должны обернуть все это в autoreleasepool и сделать их небольшими партиями и вернуть объекты в неисправности для каждой партии. Это предотвращает взлом памяти.

Однако вы можете избежать всего этого, используя NSBatchUpdateRequest.

Я не использую MR, но быстрый поиск в Google показал эту ссылку под названием «Add support for magical batch requests».

Однако, похоже, что фиксация для этого набора функций относительно новая (совершенная 10 октября), поэтому вам придется самому сделать какую-то работу, чтобы убедиться, что она превращена в официальный релиз или нет ... или если вы хотите использовать предварительную версию.

 Смежные вопросы

  • Нет связанных вопросов^_^