2010-04-21 4 views
0

내 Core Data Entity "Book"에 부울 속성이 있습니다. "wasViewed"(NSNumber numberWithBool) 북을 "보았는지"를 알려줍니다.FetchedResults 집합의 각 결과에 대한 속성 값 설정

"모든"NSManagedObjects "Book"에 대해이 속성을 "다시 설정"하고 싶습니다. 그래서 나는 세션들 사이에서 그것들을 모두 NO로 설정할 수 있습니다. 이것은 잘 작동하고

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

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

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

그러나 지금은 이런 식으로, 각 도서 객체를 통해 이동 루프를 설정하는 것이 필요 : 내가 이렇게 모든 책을 검색하는 자 NSPredicate를 사용

for(Book *b in mutableFetchResults) { 

    [b setWasViewed:NO] 
} 

검색하는 대신 조건부에 맞는 각 요소에 대해 작업을 수행 할 수있는 방법이 있습니까? managedObjectContextexecuteFetchRequest 대신 executeOperationOnFetchRequestResults 또는 그 라인을 따라 표시 될 수 있습니다.

주어진 입력에 감사드립니다.

답변

1

코어 데이터는 그러한 종류의 편리한 기능을 제공하지 않습니다. 객체 세트를 업데이트하려면 '수동으로'해야합니다. 당신이 코드 라인 수에 대한 우려된다면, 당신은 아래로 당신의 예를 응축 수하십시오있는 NSDate 인 'lastViewed'처럼 당신도 뭔가에 'wasViewed'속성을 바꿀 수

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

. 책을 표시된 것으로 표시하는 대신 'lastViewed'를 현재 시간으로 간단히 업데이트 할 수 있습니다. 책의 'lastViewed'시간이 세션 시작 시간보다 큰지 확인하여 현재 세션에서 책이 표시되었는지 확인할 수 있습니다.

+0

안녕 CJ 고맙습니다. 저는 사실 단일 속성을 true로 설정하는 것 외에는 필요하지 않은 결과를 가져 오는 것에 대해 걱정했습니다. 가져 오기를 위해 makeObjectsPerformSelector와 같은 것이 있었으면합니다. 하지만 일반적으로 핵심 데이터를 사용하는 방식과 다른 것 같습니다. 얻고, 반대하고, 변경하고, 유지하십시오. "원 라이너"를 좋아해 루프처럼 읽기 쉽고 컴팩트합니다. – RickiG

+0

추 신 : 나는 "lastViewed"Date를 가지고 있는데, 이것은 특별한 경우를위한 것입니다. bot도 가져 오기와 루프를 "예약"하고 싶지 않은 이유가 바로 이것입니다. :). 여전히 좋은 충고! – RickiG

관련 문제