Dados principais: Comunicação de contexto extra aos objetos buscados com nsfetchedResultScontroller?

StackOverflow https://stackoverflow.com/questions/2133861

Pergunta

estou a usar NsfetchedResultScontroller Praticamente fora da caixa da maneira que a documentação descreve. Aqui está um trecho do meu código.

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];

Observe duas coisas:

1) o predicado. No meu modelo de dados, alguma forma e baldes têm uma relação muitos para muitos. O predicado diz "Retorne todos os objetos de algum centro cujo objeto de balde relacionado tem esse nome". Funciona conforme o esperado.

2) Estou usando o SectionNameKeypath. Na verdade, é um método no objeto modelo que faz algum cálculo de acordo com alguma lógica do aplicativo e retorna o título. Funciona conforme o esperado.

Agora, a pergunta:

Como faço para conectar essas duas coisas e tornar o método "titleaccessor" ciente do predicado? Eu gostaria que os títulos da seção fossem diferentes, dependendo do predicado (para ser preciso, dependendo do bucketid que estou usando no predicado). Para deixar claro:

No momento, o titleaccessor funciona então:

return @"result of some calculation"

Eu gostaria de fazê -lo funcionar então:

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

Eu tenho dois trens de pensamento: 1) Se essa era uma busca normal de CD (se houver uma coisa dessas), eu poderia apenas definir uma propriedade volátil dos objetos do modelo e usar isso. Mas, não tenho acesso a objetos de resultado do NSFetchedResultSController. 2) Se fosse SQL, eu faria algo como 'Selecione A, B, C como "Algo" de Blah;' Em tempo de execução, onde "C" seria o valor desejado e eu poderia usá -lo como uma propriedade. Mas isso não é SQL. :)

Como faço para realizar o comportamento desejado descrito acima?

ATUALIZAR:

Claro, você descobre a resposta logo após postar a pergunta. (Acho que postar faz parte da terapia.) Acabei de perceber que coloquei o seguinte no meu delegado de TabelaviewController, como a documentação diz:

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

Eu poderia simplesmente fazer o uso necessário aqui. Essa é a melhor abordagem? Diga "sim" e faça alguns pontos fáceis. :) (ou sugira uma abordagem ainda melhor.)

Foi útil?

Solução

Isso parece a abordagem mais limpa que eu consigo pensar. Não há como eu saber que uma entidade pode voltar ao predicado que a buscou.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top