2011-08-31 6 views
5

Nel codice seguente:Come recuperare il nome della sezione quando si utilizza NSFetchedResultsController e sectionNameKeyPath è una relazione?

NSFetchedResultsController *frc = 
[[NSFetchedResultsController alloc] 
initWithFetchRequest:fetchRequest 
managedObjectContext:myManagedObjectContext 
sectionNameKeyPath:@"store" 
cacheName:@"SomeCache" 
]; 

Il "negozio" valore @ per sectionNameKeyPath punta in realtà a una relazione a un'entità Store, che ha un attributo nome che ho davvero bisogno come il mio titolo sezione di intestazione.

Ma il modo in cui il mio codice è messa a punto non può essere realizzato come ho invece capito titoli delle sezioni come: 0x5b504f0 0x5b51190 Quali sono gli indirizzi dati di codice per l'oggetto Conservare essere scaricati, per quanto posso dire.

Come posso utilizzare NSFetchedResultsController in modo che io possa dire che voglio recuperare l'attributo nome di qualunque cosa recuperi da sectionNameKeyPath: @ "store"? O c'è qualche altra soluzione?

risposta

5

Prova sectionNameKeyPath:@"store.name"

+1

Grazie! Solo per dare materiale di scena, il seguente aiuto ha aiutato: http://stackoverflow.com/questions/2353924/core-data-fetched-results-controller-and-custom-section-header – pulkitsinghal

1

So che questo è un vecchio thread, ma vorrei aggiungere la mia soluzione utilizzando Swift.

Devo dire che questa soluzione dipende dal formato del nome della sezione restituito dallo NSFetchedResultsController, quindi dipende dalle implementazioni interne che possono essere modificate da Apple.

Il nome della sezione contiene l'URI del ID oggetto nell'archivio di dati persistenti, in modo da poter ottenere l'oggetto dalla prima estrazione del URI e poi chiedere il negozio per l'oggetto con il corrispondente URI

override func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    let sectionInfo = fetchedResultsController?.sections![section] 
    let sectionName = sectionInfo?.name 

    //This part depends on the internal implementation of sectionInfo.name 
    let initialRange = sectionName?.rangeOfString("<") 
    let finalRange = sectionName?.rangeOfString(">") 

    let uri = sectionName?.substringWithRange((initialRange?.endIndex)!..<(finalRange?.startIndex)!) 
    let url = NSURL(string: uri!) 

    let store = fetchedResultsController?.managedObjectContext.persistentStoreCoordinator 

    let objectID = store?.managedObjectIDForURIRepresentation(url!) 
    let coreObject = fetchedResultsController?.managedObjectContext.objectWithID(objectID!) 
    //return the correct property from the object as the title 
    let title = ... 
    return title 
} 

Beh, è ​​necessario verificare la presenza di errori (io userei un sacco di guard di fronte a quelli let) ma tu hai l'idea.