2010-01-25 3 views
0

설명서가 설명하는 방식대로 NSFetchedResultsController을 사용하고 있습니다. 다음은 내 코드의 발췌 부분입니다.핵심 데이터 : NSFetchedResultsController로 가져온 개체에 추가 컨텍스트 통신?

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SomeEntity" 
              inManagedObjectContext:moc]; 
[fetchRequest setEntity:entity]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"id" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 

NSPredicate *somePredicate = [NSPredicate predicateWithFormat:@"ANY buckets.name == %@", bucketId]; 
[fetchRequest setPredicate:somePredicate]; 

frc = [[NSFetchedResultsController alloc] 
     initWithFetchRequest:fetchRequest 
     managedObjectContext:moc 
     sectionNameKeyPath:@"titleAccessor" 
     cacheName:@"frc"]; 
[fetchRequest release]; 

주의 사항 두 가지 :

1) 술어. 내 데이터 모델에서 SomeEntity와 버킷은 다 대다 관계가 있습니다. 술어는 "관련된 버킷 객체가이 이름을 가진 모든 SomeEntity 객체를 반환합니다"라고 말합니다. 예상대로 작동합니다.

2) sectionNameKeyPath를 사용하고 있습니다. 실제로는 일부 응용 프로그램 논리에 따라 계산을 수행하고 제목을 반환하는 모델 객체의 메서드입니다. 예상대로 작동합니다. 이제

질문 :

어떻게이 두 가지를 연결하고 술어의 "titleAccessor"방법은 인식해야합니까? 나는 술어에 따라 섹션 제목이 달라 지길 바란다. (술어에서 사용하고있는 버킷 아이디에 따라). 그것은 명확하게하려면 :

을 지금 titleAccessor 그렇게 작동합니다

if (bucketId == a): 
    return @"aPrefix" + @"result of some calculation" 
else if (bucketId == b): 
    return @"bPrefix" + @"result of some calculation" 

을 나는 생각의 두 열차가 :

return @"result of some calculation" 

내가 너무 일을하고 싶습니다 1)이있는 경우 정상적인 CD 가져 오기 (그런 경우), 난 그냥 모델 개체의 일부 휘발성 속성을 설정하고 그것을 사용할 수 있습니다. 하지만 NSFetchedResultsController 결과 개체에 액세스 할 수는 없습니다. 2) 이것이 SQL이라면 'select a, b, c'를 "something"으로 할 것입니다. ' 런타임에 "c"가 원하는 값이 될 것이고 그 값을 속성으로 사용할 수 있습니다. 그러나 이것은 SQL이 아닙니다. :)

위에서 설명한 원하는 동작을 어떻게 수행합니까?

UPDATE : 물론

, 당신은 바로 질문을 게시 한 후 대답 자신을 알아. (나는 게시물이 치료의 일부입니다 같아요.) 난 그냥 문서가 말한대로 내 tableviewcontroller 위임에 다음을 넣어 것을 깨달았다 :

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex:section]; 
    return [sectionInfo name]; 
} 

여기에 필요한 맹 글링을 바로 할 수있다. 그게 최선의 접근 방법인가요? "예"라고 말하고 쉬운 점을 만드십시오. :) (또는 더 나은 방법을 제안하십시오.)

답변

0

내가 생각할 수있는 가장 깨끗한 접근 방법처럼 보입니다. 엔티티가 가져온 조건부로 다시 도달 할 수 있다는 것을 알 수있는 방법이 없습니다.

+0

또한 MVC 분리에 적합하며 UI 구성 요소를 M에서 제외하고 VC에서 UI 문자열로 변환하도록합니다. – Jaanus

관련 문제