2013-04-24 6 views
0

NSFetchedResultsController가 관리하는 테이블 뷰가 있습니다.FetchedResults 컨트롤러 계산 값 필터링

제 문제는 핵심 데이터 엔티티에서 관련 값을 조사해야하는 계산 된 값을 기반으로 데이터를 필터링하려고합니다.

추가 컨텍스트 제공 : "Task"라는 핵심 데이터 엔티티와 "TaskActions"라는 다분간 관계가 있습니다.

작업을 검토하고 일부 사용자 지정 논리를 사용하여 작업 tableview를 정렬하고 싶습니다.

문제는 이것이 어떻게 가장 잘 이루어 졌는지 정말로 모르겠다는 것입니다. 여기

내가을 시도한 것입니다 :

NSFetchRequest *requestForAll = [[NSFetchRequest alloc] initWithEntityName:@"Task"]; 
NSPredicate *actionPredicate = [NSPredicate predicateWithFormat:@"taskActionPerformed == %@",@YES]; 
requestForAll.predicate = actionPredicate; 
[self setFetchedResultsController:[[NSFetchedResultsController alloc] initWithFetchRequest:requestForAll managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil]]; 

나는 개체의 속성을 "taskActionPerformed"를 넣어, 그래서 같은 게터 값을 대체하여 작업의 정렬이 "필터링"을 얻을 수 있습니다 :

- (NSNumber*)taskActionPerformed 
{ 
    for (TaskActions *action in self.actions) 
    { 
     //Perform Logic 
     return @YES; 
    } 
    return @NO; 
} 

그러나, 나는 (내가 게터로하고있어 같은) KVO 메소드를 오버라이드 (override)하는 것은 권장하지 않습니다 읽었습니다, 심지어는 권장하지 않습니다.

또한 위의 솔루션은 데이터를 보존 할 때까지만 작동합니다. 데이터를 저장 한 후에는 taskActionPerformed가 호출되지 않고 fetchedresultscontroller가로드되지 않습니다.

저는이 일반적인 문제를 해결하는 가장 좋은 방법을 알고 싶습니다.

답변

1

메모리를 필터링하는 것이 가장 좋습니다. 코어 데이터 프로그래밍 Gude에서

Fetching Managed Objects에 당신이 (당신이 메모리에서 자신을 필터링 과도 특성을 사용할 수 있지만) 과도 특성을 기반으로 술어를 사용하여 가져올 수 없습니다. ... 요약하면, 반입을 직접 실행하는 경우 일반적으로 반입 요청에 Objective-C 기반 술어 또는 정렬 설명자를 추가하지 않아야합니다. 대신 이러한 결과를 가져 오기 결과에 적용해야합니다.

+0

나는 이것이 어떻게 이루어질 지에 대한 생각이 다소 있다고 생각하지만,이 필터를 "메모리 내에서"어떻게 수행해야하는지에 관해 더 많은 지침을 줄 수 있습니까? 특히 NSFetchedResultsController를 메모리 구조로 사용하는 방법 (NSArray를 추측하고 있습니다). – hatunike

+0

오른쪽. 대부분의 경우'datasource' 메소드에서 가져온 결과 컨트롤러의'fetchedObjects'를 즉시 필터링 할 수 있습니다. NSArray도 가능합니다. – Mundi