Установка значения свойства для каждого из результатов в наборе FetchedResults - PullRequest
0 голосов
/ 21 апреля 2010

На моем основном объекте данных "Book" у меня есть логическое свойство, wasViewed (NSNumber numberWithBool) это говорит мне, была ли Книга "просмотрена".

Я хотел бы реализовать своего рода «сброс» этого свойства для всех моих NSManagedObjects «Книга». Так что я могу установить их всех на NO между сессиями. Я использую NSPredicate для получения всех Книг, как это:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"wasViewed == %@", [NSNumber numberWithBool:YES]];

// code for setting entity, request etc...

NSMutableArray *mutableFetchResults = [[[managedObjectContext executeFetchRequest:request error:&error] mutableCopy] autorelease];

Это работает очень хорошо, однако, теперь мне нужно настроить цикл, пройти каждый Книжный объект, что-то вроде этого:

for(Book *b in mutableFetchResults) {

    [b setWasViewed:NO]
}

Есть ли способ выполнить действие для каждого элемента, который соответствует предикату, вместо извлечения его? Так что вместо executeFetchRequest на managedObjectContext это может быть executeOperationOnFetchRequestResults или что-то в этом роде.

Спасибо за любой предоставленный вклад:)

1 Ответ

1 голос
/ 21 апреля 2010

Базовые данные не предоставляют такую ​​удобную функцию. Чтобы обновить наборы объектов, вам нужно будет сделать это «вручную». Если вас беспокоит количество строк кода, вы можете сжать ваш пример до:

[mutableFetchResults makeObjectsPerformSelector:@sel(setWasViewed:) withObject:[NSNumber numberWithBool:NO]];

Вы также можете изменить свой атрибут wasViewed на что-то вроде lastViewed, которое является NSDate. Вместо того, чтобы отмечать книгу как просмотренную, вы просто обновляете lastViewed до текущего времени. Затем можно определить, была ли книга просмотрена в текущем сеансе, проверив, больше ли время последнего просмотра книг, чем время начала сеанса.

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