Preferirei utilizzare i dati di base o salvare i file nel sistema?

3

Sto sviluppando un'app iOS che fondamentalmente recupera un JSON da una posizione remota, lo analizza e crea un'istanza delle classi per un paio dei suoi elementi. Per alcune visualizzazioni, questo dovrebbe darti un'idea di base di come appare il mio json:

{
  "match": [
    {
      "id": 1,
      "date": "1960-01-01",
      "team 1": 1,
      "team 2": 2
    },
    {
      "id": 2,
      "date": "1960-01-02",
      "team 1": 1,
      "team 2": 3
    }
  ],
  "team": [
    {
      "id": 1,
      "name": "Team Red"
    },
    {
      "id": 2,
      "name": "Team Green"
    },
    {
      "id": 3,
      "name": "Team Yellow"
    }
  ]
}

Questo JSON può diventare piuttosto pesante, una volta riempito completamente. Per il mio attuale sistema demo sto parlando di 40k linee e ~ 2 MB di dimensione del file, ma potrebbe facilmente andare ben oltre con i miei dati live. Ovviamente non sto caricando tutto in una volta, ma invece caricando le nozioni di base, che includono un paio di ID richiesti, quindi posso fare richieste API per recuperare solo gli ID di cui ho bisogno per qualsiasi cosa voglia fare.

In Swift ho implementato ciascuno degli array JSON per un'ulteriore elaborazione:

class Match
  - id
  - date
  - teams

class Team
  - id
  - name

Per salvare il traffico e non richiedere a ogni utente di ricaricare tutto ogni volta che avvia l'app, voglio memorizzare nella cache i risultati, in particolare salvarli da qualche parte. Ma qui è dove diventa complicato, e dove la mia domanda si trova:

Dovrei piuttosto creare una rappresentazione CoreData di ogni elemento per poterli salvare tramite Core Data e interrogare attraverso di essi, o potrei semplicemente salvare il JSON risultante nel file system, caricarlo una volta che l'app si avvia e ri-analizzarlo a quel punto?

Il vantaggio principale di Core Data è dalla mia comprensione che posso effettivamente interrogare le mie voci e collegarle, quindi potrei chiedere più facilmente "Qual è il nome delle squadre dalla prima partita?" . Ci sono altri vantaggi per me per usare Core Data, e quali (dis) vantaggi potresti vedere nello scrivere il file JSON sul disco?

    
posta Padarom 04.02.2015 - 11:50
fonte

1 risposta

3

Consiglio vivamente CoreData su una soluzione ad hoc.

1) È più veloce del caricamento e dell'analisi del NSData raw ogni volta che hai bisogno di informazioni. CoreData esegue la memorizzazione nella cache in modo implicito e devi solo memorizzare le informazioni rilevanti per te (quindi anche le dimensioni del file più piccole).

2) È un framework di base, quindi c'è un'enorme quantità di supporto disponibile per qualsiasi problema che incontri. Considerando che, uno storage di file personalizzato avrà problemi molto specifici per il tuo caso d'uso e sarà molto difficile da ottenere aiuto.

3) Ci sono un certo numero di librerie di terze parti CoreData che rimuovono quasi tutto il codice boilerplate che richiede; quasi al punto che le classi NSManagedObject possano essere trattate come qualsiasi oggetto. (avvertenza: NSManagedObjectContext NSPersistentStoreCoordinator e NSManagedObjectModel devono ancora essere impostati, ma ci sono modelli di codice per ciascuno).

L'aspetto query-able è un vantaggio e con le relazioni è tremendamente facile passare dall'oggetto a un altro oggetto correlato.

In definitiva, la curva di apprendimento è ripida, ma ho trovato molto utile una volta ottenuto un buon prototipo funzionante.

    
risposta data 05.02.2015 - 09:12
fonte

Leggi altre domande sui tag