2010-09-06 12 views
5

Desidero creare un'entità per posizione con proprietà: latitudine & longitudine. Quindi, voglio impostare una relazione da utente a posizione, da foto a posizione, ecc. Dovrei farlo senza creare una relazione inversa da posizione agli altri? Altrimenti, come lo farei?Come modellerai la posizione in Core Data?

Grazie!

Matt

risposta

0

Va bene, so come fare questo ora. Posso creare un abstract NSManagedObject chiamato LocatableObject. Quindi, posso rendere questo il Parent dei miei altri NSManagedObject s, come User e Photo. Quindi, posso creare una relazione Location su Location che punta a LocatableObject e l'inversa su LocatableObject sarebbe location e farebbe riferimento a Location.Ora, User e Photo avranno uno location tramite LocatableObject. Per ora, però, non memorizzerò la posizione delle foto, quindi sto solo usando Location e User ha un location e Location ha un user.

0

Questa è una specie di una domanda sensibile al contesto, in che senza l'intero modello di dati potrebbe non essere possibile a venire con il miglior design.

Ma - la latitudine e la longitudine sono modellate naturalmente come doppie. Probabilmente non dovrebbero essere opzionali poiché un'entità chiamata "posizione" non ha senso senza entrambi. Probabilmente dovresti anche modellare il cerchio di incertezza in metri, potresti non usarlo ora ma potrebbe essere molto utile e ti costerà molto poco.

Penso che si desideri avere una relazione inversa poiché potrebbe essere utile iniziare con la posizione e trovare fotografie scattate entro una certa distanza da quella posizione. Non credo che vogliate fare foto e location in molti: molte relazioni dal momento che il salvataggio dei dati tentando di riutilizzare le posizioni è falso, renderà il vostro codice molto più complesso e farà risparmiare pochissimi byte. foto: la posizione è più naturale in 1: 1, ma potresti trarre vantaggio dall'aggiunta di un metodo come (NSArray*)locationsWithinMeters:(float)meters ofLocation:(Location*)thisLocation per restituire tutte le posizioni "abbastanza vicine" in qualche luogo - molto utile per trovare tutte le foto di qualche luogo.

+0

Non sono d'accordo sul fatto che non si debba usare una relazione inversa tra molti luoghi e foto. Non ha nulla a che fare con il risparmio di memoria o archiviazione. I modelli dovrebbero riflettere la realtà e le relazioni sono esse stesse dei dati. In questo caso, molte foto possono essere scattate nella stessa posizione e potresti voler scegliere una posizione e trovare tutte le foto scattate lì. Le relazioni nel modello dovrebbero riflettere questo collegamento reale il più vicino possibile. – TechZen

+1

È un punto di vista ragionevole, ma come si decide quali posizioni sono "uguali"? Pensaci con l'obiettivo di individuare un punto di riferimento o di ricreare una fotografia e vedi che ogni arrotondamento è meglio lasciare a una query configurabile. Meglio forse mantenere la Location come entità esatta 1: 1 con Photo e aggiungere un'entità Region con span attributo (diametro in metri) e centro, che può avere molte Locations. –

1

Nella maggior parte dei casi, si desidera creare una relazione inversa.

Le relazioni inverse rendono più semplice l'integrità del grafico di mantenimento e, soprattutto, le relazioni inverse riflettono le relazioni del mondo reale tra gli oggetti, gli eventi o le condizioni simulate dal modello. Il punto di un oggetto grafico non è solo la mera memorizzazione di bit di dati, ma anche la modellazione attiva delle relazioni tra le diverse parti di quei dati. Nei Core Data, le relazioni stesse sono dati attivi.

Nel mondo reale, le foto vengono scattate in posizioni e inversamente alcune località hanno foto scattate in esse. Una relazione inversa modellerebbe quella realtà e ti darà la possibilità di cercare le foto in base alle loro posizioni.

0

Penso che utilizzare i dati di base per gestire le foto e il lat and lon del luogo in cui è stata scattata la foto sia perfetto. Ma in qualche modo usare il CD per gestire la "posizione" è un po 'strano. Penso che la ragione per cui stai combattendo sia perché "location" non si adatta veramente a questo modello di dati. Come Adam suggerisce che avrei solo spazzato le foto e le foto che sono state scattate a una certa distanza appart una posizione. Per installare tutte le foto entro 1 Km l'una dall'altra forma una posizione. probabilmente avrete una certa sovrapposizione ...

si dovrebbe verificare il codice di esempio ADC PhotoLocations