2017-12-21 10 views
0

Ich habe JSON wie:Objective-C - JSON-Format für Core Data Beziehung wie in MyQSL - Best Practices

{ 
    cities: { 
     1: "London", 
     3: "New York", 
     9: "Tokio", 
     10: "Moscow" 
    }, 
    keywords: { 
     120: "walk", 
     121: "run", 
     122: "eat", 
     123: "lake" 
    }, 
    parks: [ 
      { 
       id: "1", 
       likes: "5", 
       parkName: "Park 1 in NEW YORK", 
       city: "3", // id of the City NEW YORK 
       keywords: [ 
          "120", 
          "121" 
          ] 
      }, 
      { 
       id: "1", 
       likes: "678", 
       parkName: "Park 2 in NEW YORK", 
       city: "3", // id of the City NEW YORK 
       keywords: [ 
          "120", 
          "123" 
          ] 
      }, 
      { 
       id: "1", 
       likes: "416", 
       parkName: "Park in London", 
       city: "1", // id of the City London 
       keywords: [ 
          "123", 
          "122" 
          ] 
      }, 
      ... so many ... 
      ] 
    } 
} 

Also, in Xcode, möchte ich wie folgt verwenden: sample Xcode Core Data relationship

I erstellen NSManagedObject Subklasse, und ich habe diese Methoden:

- (void)addParksObject:(PKParks *)value; 
- (void)removeParksObject:(PKParks *)value; 
- (void)addParks:(NSSet<PKParks *> *)values; 

Aber ich erwartete Parks Tabelle wie in MySQL zu anderen Tabellen zu verbinden, mit ID der Städte und Schlüsselwörter. Also, Ich habe viele Parks, einige Städte und Schlüsselwörter.

Ist dieser Weg zu Speicherdaten korrekte Methode?

  1. Sollte ich ID s der Städte und Keywords?
  2. Sollte ich Tabellen manuell verbinden, wie in MySQL?
  3. Sollte ich JSON-Format in keine IDs ändern?

Zum Beispiel JSON:

{ 
    parks: [ 
      { 
       id: "1", 
       likes: "5", 
       parkName: "Park 1 in NEW YORK", 
       city: "NEW YORK", 
       keywords: [ 
          "walk", 
          "run" 
          ] 
      }, 
      { 
       id: "1", 
       likes: "678", 
       parkName: "Park 2 in NEW YORK", 
       city: "NEW YORK", 
       keywords: [ 
          "walk", 
          "lake" 
          ] 
      }, 
      { 
       id: "1", 
       likes: "416", 
       parkName: "Park in London", 
       city: "London", 
       keywords: [ 
          "lake", 
          "eat" 
          ] 
      }, 
      ... so many ... 
      ] 
    } 
} 
+0

CoreData Wenn Sie nicht fortgegangen sind und den persistenten Speicher geändert haben, ist eine SQLite-Datei. Sie wissen vielleicht, dass Sqlite standardmäßig keine Integritätsbedingungen für Primär- und Fremdschlüssel oder referenzielle Integritätsbedingungen aufweist. CoreDatas Beziehung ist eine Arbeit, um das zu lösen. Wenn Sie Städte mit einem Parktisch verbunden haben, haben Sie eine Eins-zu-Viele-Beziehung zwischen Stadt und Park geschaffen. Wenn Sie also ein Stadtobjekt in Ihren managedObject-Kontext holen, wird der Eigenschaft parks des Stadtobjekts ein Array aller Parks zugeordnet. Also, was ist die Verwirrung? –

+0

Wenn Sie einen Park hinzufügen, fügen Sie ihn mit einem City Objekt hinzu, indem Sie etwas wie cityObject.parks = set von Parks mit Ihrem aktuellen verwenden :) so offensichtlich Kerndaten wissen, welcher Park mit der Stadt assoziiert ist, behält sie eine ID bei Primärer Schlüssel und Fremdschlüssel intern, auf den Sie keinen Zugriff haben, wenn Sie die SQLite-Datei öffnen, sehen Sie eine Spalte namens Z_PK, Z_FK) und Sie müssen keine ID zuordnen, um manuell zwei verwaltete Objekte zu verknüpfen –

Antwort

1

Aber ich erwarteten Park Tabelle wie in MySQL zu anderen Tabellen zu verbinden, ID der Städte und Keywords.

Dies ist der klassische Fehler zu denken, dass Core Data wie SQL ist. Es verwendet SQLite, aber SQL-Stil Denken wird Sie in Schwierigkeiten bringen.

Core Data dient dazu, Instanzen Ihrer Modellobjekte zu speichern. Diese Objekte können Eigenschaften haben, die auch Modellobjekte sind. Das ist eine Core Data Beziehung. Sie verwenden keine Fremdschlüssel oder Objekt-IDs, um die Beziehung darzustellen. Sie verwenden Modellobjekteigenschaften. Core Data übersetzt das von/nach SQL.

Sie möchten vielleicht etwas über how Core Data relationships work lesen.