Frage

Ich möchte eine Stadt / Land-Selektor 2 NSPopupButtons machen. Eine Pop-up-Taste wird den ersten Teil enthält beispielsweise UK, und der zweite wird, den zweiten Teil enthalten, z.B. London So ist die ganze Stadt / Land-Combo wird gelesen: UK London Allerdings möchte ich den zweiten Teil aktualisiert werden, wenn der erste Teil ausgewählt ist, z.B. wenn London ausgewählt wird, werden die möglichen Optionen in der zweiten Popupbutton sein London, Birmingham, Manchester usw., während, wenn Italien gewählt wurde, dann wird die zweite Popupbutton werden Länder wie Venedig anzuzeigen, Mailand, etc.

Danach würde Ich mag diese Daten speichern in einem Attribut in Core Data. so um die beiden miteinander zu verbinden und zu speichern „UK London“ in einem Attribut namens „Ort“.

Könnte mir jemand etwas Hilfe geben, wie diese bitte implementieren?

Danke!

War es hilfreich?

Lösung

Wie haben Sie Ihr Land / Stadt Daten gespeichert (sie sind auch in Core Data)? Das wird einige der Details bestimmt hier, aber die Grundidee ist, dass Sie Cocoa Bindungen verwenden, um jede NSPopUpButton auf den Inhalt eines NSArrayController zu verbinden.

Cocoa Bindungen sind nicht schrecklich einfach, aber sie wirklich Arbeit wie Magie tun, wenn Sie alles richtig konfiguriert bekommen. Das Problem ist, dass, wenn Sie richtig konfigurierten Dinge nicht haben, es ist schwer zu bestimmen, was nicht in Ordnung ist.

Hier ist die allgemeine Einstellung:

Sie konfigurieren den ersten NSArrayController der Inhalt Ihrer Länderdaten sein. Wenn Sie Core Data verwenden, dann übergeben Sie den Objektkontext verwaltet und haben sie ihre eigenen Daten für Ihre Country Einheit vorzubereiten. Andernfalls müssen Sie den Inhalt zu einem vorhandenen Array von Objekten binden müssen, die ein Schlüsselwert Codierung konform Methode ihrer verbundenen Städten erreichbar. Mit Kerndaten für die Datenquelle hier wird Ihr Leben leichter machen.

Und dann Sie binden den zweiten NSArrayController an denen bekommen ihren Inhalt aus dem selection der ersten, mit dem entsprechenden Schlüssel Pfad zu Ihren Städten. Mit Core Data, wird dies die Content Set sein (da es ungeordnet ist).


Edit: Bah, Kommentarfelder sind völlig wertlos. Hier ist eine richtige Antwort auf Ihren ersten Kommentar:

, diese Beziehung modellieren in Core Data, sollten Sie Ihr Modell einzurichten, wie folgt aussehen:

Xcode Modell-Editor Screenshot

Es ist wichtig zu beachten, dass ich meine Einheiten benutzerdefinierten Klassen (MBCountry und MBCity) gegeben habe. Durch Xcode fragen die Klassen für Sie (wählen Sie das Objekt, gehen Sie auf Neue Datei ... und wählen Cocoa-Klasse -> Managed Object Class) zu generieren, können Sie echte Accessormethoden verwenden (statt nur valueForKey:). (Nebenbei, ich wirklich Wert Rentzsch des Mogenerator die dies für Sie tut automatisch mit jedem Speichern.)

Nun, da Ihr Modell aufgebaut ist, können Sie die Datenspeicher wie diese füllen können:

NSArray *countryList = ...; /* Get your array of country names */
for (NSString *countryName in countryList) {
    MBCountry *aCountry = (MBCountry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBCountry" inManagedObjectContext:context];
    [aCountry setName:countryName];
    NSArray *cityList = ... /* Get your array of city names for this country */
    for (NSString *cityName in cityList) {
        MBCity *aCity = (MBCity *)[NSEntityDescription insertNewObjectForEntityForName:@"MBCity" inManagedObjectContext:context];
        [aCity setName:cityName];
        [aCountry addCitiesObject:aCity];
    }
}

Core Data wirklich ist Weg Overkill hier. Aber es klingt wie Sie Core Data in anderen Abschnitten des Programms verwenden möchten, so ist dies für eine große Gelegenheit zum Lernen macht. Es hat eine sehr steile Lernkurve (sicherlich eine der schwierigsten Aspekte des Cocoa-API), aber es machbar ist. halten Einstecken einfach weg!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top