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?
- Sollte ich ID s der Städte und Keywords?
- Sollte ich Tabellen manuell verbinden, wie in MySQL?
- 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 ...
]
}
}
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? –
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 –