2010-04-21 4 views
0

В моей основной структуре данных «Книга» У меня есть логическое свойство «wasViewed» (номер NSNumberWithBool) , который говорит мне, была ли книга «просмотрена».Установка значения свойства для каждого из результатов в наборе FetchedResults

Я хотел бы реализовать своего рода «перезагрузку» этого свойства для всех моих книг 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

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

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

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

+0

Привет CJ Спасибо, я был в основном обеспокоен необходимостью получения результатов, которые мне не нужны ни для чего другого, кроме установки единственного свойства в true. Я надеялся, что есть что-то вроде makeObjectsPerformSelector для выборки. Но я предполагаю, что это будет отличаться от того, как вы обычно используете основные данные. Получить и объект, изменить его, сохранить его. Мне нравится ваш «однострочный», он так же легко читается, как петля и более компактный. – RickiG

+0

PS. У меня есть дата «lastViewed», это только для нескольких особых случаев, что также было связано с тем, что мне не нравилось «резервировать» бот за выборку и цикл для нее :). Хороший совет еще! – RickiG

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