Проще всего я хочу перебирать через CoreData [self.fetchedResultsController fetchedObjects]
(точнее, я использую MagicalRecord в этом примере) и изменять все элементы, соответствующие моим критериям (оператор if), а затем вносить изменения в эти объекты.Редактирование нескольких объектов в fetchedObjects CoreData
for (Task *aTask in [[self.fetchedResultsController fetchedObjects] mutableCopy]) {
if ([aTask.day past] && [[aTask isArchived] isEqual:@(NO)]) {
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
[context MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) {
aTask.day = date;
}];
}
}
Но, как оказалось, это не сработает! Я пытаюсь решить, где мне не нужно вручную управлять всем CoreData, поскольку этот answer определяет и вместо этого находит сжатое решение проблемы, несколько строк кода и не много итераций.
EDIT: После ответа от Дэна, я отредактировал мой несовершенный код для ...
NSPredicate *uncompletedTasks = [NSCompoundPredicate andPredicateWithSubpredicates:@[[NSPredicate predicateWithFormat:@"day < %@ AND isArchived = %@",[NSDate date],@NO]]];
self.fetchedResultsController = [Task MR_fetchAllSortedBy:@"dateScheduled" ascending:YES withPredicate:uncompletedTasks groupBy:nil delegate:self inContext:[NSManagedObjectContext MR_defaultContext]];
for (Task *aTask in [self.fetchedResultsController fetchedObjects]) {
aTask.day = date;
}
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
[context MR_saveOnlySelfWithCompletion:^(BOOL success, NSError *error) {}];
Это решает проблему, но только на мгновение, когда я обновить представление, я получаю эту ошибку:
CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. *** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects 1 with userInfo (null)
Почему вы устанавливаете делегат для этого FRC? –
здесь нет необходимости в «полноценной» FRC, не можете ли вы просто выполнить выборку, чтобы получить все объекты '[context executeFetchRequest: ...]' или '[Task" объекты, отвечающие предикату ... "] '? –
Но это что-то изменит? Не будет ли это тем же результатом, что и «полноценный» FRC.Меньше кода. – Souljacker