2010-04-19 14 views
6

Ho un'applicazione che contiene alcune posizioni nei dati principali e voglio mostrarli all'utente in ordine di vicinanza alla posizione dell'utente. Sto usando un NSFetchedResultsController per servire le posizioni nella Vista tabella. Ho pensato di creare un metodo di accesso virtuale che restituisce il percorso di distanza da parte dell'utente, che verrebbe calcolato utilizzando una CoreLocationManager "globale", ma si blocca con la ragione:Ordina NSFetchedResultsController risultati per posizione utente

terminazione app a causa di eccezione non identificata 'NSInvalidArgumentException', motivo: 'percorso chiave distanceFromCurrentLocation non trovato in un'entità < NSSQLEntity Località id = 4>'

ho anche dare all'utente la possibilità di ordinare in ordine alfabetico, quindi preferirei che se ho mantenuto la NSFetchedResultsController, se possibile.

Come devo fare?

Grazie!

risposta

1

Gli accessor virtuali non funzioneranno nei dati di base se non si dispone di un attributo transitorio definito nell'entità. NSFetchedResultsController (e tutte le altre operazioni di Core Data) esaminano il grafico delle entità prima che provino a eseguire qualsiasi operazione. Se la proprietà virtuale non viene visualizzata nella definizione dell'entità, allora NSFetchedResultsController segnalerà che non esiste alcun attributo di questo tipo.

Si desidera definire un attributo transitorio nell'entità con il nome distanceFromCurrentLocation e si dovrebbe essere in grado di scrivere una funzione di accesso virtuale e visualizzare NSFetchedResultsController.

+0

Si verifica lo stesso arresto anomalo quando si utilizza una proprietà transiente. Solo quando si effettua una proprietà standard funziona, ma è ipoteticamente sbagliato, suppongo .. – cgp

+0

Non sai cosa stai cercando di fare esattamente. Stai memorizzando le posizioni nelle entità Core Data o stai tentando di utilizzare Core Data per organizzare le posizioni da visualizzare in una tabella senza prima inserirle in entità? Se è il più tardi, allora non funzionerà. – TechZen

1

Ho provato a fare la stessa cosa, per ordinare i risultati in base alla distanza da una posizione. Ecco una delle mie domande:

Core Data and Core Location

Si è scoperto che è necessario caricare tutte le posizioni in memoria per confrontarli. Ho finito per usare SQLite, che è più difficile da implementare ma mi ha causato molti meno mal di testa per questo tipo di funzione.

Probabilmente non è la risposta che si desidera, ma se si dispone di un set di dati di grandi dimensioni, si consiglia di SQLite. Finì per essere più veloce e più facile da gestire per me.

+0

Sfortunatamente SQLite non è un'opzione per me, dato che ho bisogno di usare i database Core Data esistenti ... Grazie comunque per il suggerimento;) – cgp

3

Il problema (o funzionalità mancante) di NSFetchedResultsController è la capacità mancante di utilizzare gli attributi transitori per l'ordinamento e il percorso chiave di sezione.

Ho lottato con questo pure, per cui si potrebbe essere interessato a questo:

NSFetchedResultsController sections localized sorted

Sono sicuro che si potrebbe utilizzare questo approccio, così se si potesse garantire un insieme limitato di record. Ma mi piacerebbe davvero vedere una soluzione più sofisticata.

Problemi correlati