2015-02-21 17 views
9

Ho una vista che contiene una tabellaView. Sto usando NSFetchedResultsController per visualizzare i miei risultati da Core Data.Come utilizzare insieme NSFetchedResultsController e UISearchController?

Vorrei aggiungere un UISearchController (non uno UISearchDisplayController come questo è obsoleto in iOS 8), ma non so come collegarli.

Devo avere solo uno NSFetchedResultsController o due? Immagino che ci sia un modo per recuperare tutti i dati con lo NSFetchedResultsController e poi ordinarli secondo lo UISearchController ho sbagliato?

Grazie per l'aiuto che mi puoi dare su questo.

risposta

8

Qualche considerazione ...

Quando si crea il resultsController per il searchController, si può passare ad esso i dati che si desidera cercare. Se si utilizza un NSFetchedResultsController nella tabella principale, è possibile passare l'array fetchedObjects. Quindi, in risposta alle modifiche al testo di ricerca, si filtra l'array (è possibile utilizzare un predicato e filteredArrayUsingPredicate per creare un array separato con i risultati della ricerca oppure è possibile scorrere l'array per costruirlo). Gli svantaggi di questa rotta sono che (a meno che non vengano implementati manualmente) i risultati della ricerca non verranno suddivisi in sezioni separate e i risultati della ricerca non si aggiorneranno automaticamente se i dati sottostanti cambiano (ad esempio su un thread in background).

Immagino che si possa avere un secondo NSFetchedResultsController: ciò faciliterebbe l'utilizzo delle sezioni e potrebbe potenzialmente consentire l'aggiornamento automatico dei risultati (utilizzando i metodi delegati) se i dati vengono aggiornati in background, ad esempio. Ma sarei nervoso della complessità che introduce.

Un'altra opzione, se si sceglie di effettuare la ricerca in situ (cioè specificare resultsController = zero), sarebbe quella di utilizzare i criteri di ricerca per aggiornare la NSFetchedResultsController stesso (vale a dire che modifica il predicato sottostante e rieffettuando il fetch). In questo modo la tua tabella di ricerca appare esattamente come la tabella principale (comprese le sezioni, se la usi), ma le righe visualizzate si riducono man mano che i criteri di ricerca diventano più precisi. Questa opzione richiede attenzione per garantire che l'FRC sia ricostruito correttamente e potrebbe non essere accettabile dal punto di vista delle prestazioni, se si dispone di un set di dati di grandi dimensioni.

+0

Chiming in qui un paio di mesi più tardi, ho implementato la terza opzione di cui sopra; il codice è molto più pulito e non devo passare tra i due 'NSFetchedResultsController's. – Koen

Problemi correlati