Domanda

Vorrei fare un selettore città / paese, utilizzando 2 NSPopupButtons. Un pulsante popup conterrà il primo esempio parte Regno Unito, e il secondo conterrà la seconda parte es Londra Così tutta la città / Combo Paese leggerà: UK London tuttavia, voglio la seconda parte di essere aggiornato quando è selezionata la prima parte, ad esempio se si seleziona Londra, le scelte possibili nella seconda popupbutton saranno Londra, Birmingham, Manchester, ecc, mentre se l'Italia è stata scelta, poi il secondo popupbutton visualizzerà paesi come Venezia, Milano ecc.

In seguito, vorrei memorizzare questi dati in un attributo in Core Data. in modo di unire le due cose insieme, e memorizzare "UK London" in un attributo denominato "luogo".

Qualcuno mi potrebbe dare qualche aiuto su come implementare questo favore?

Grazie!

È stato utile?

Soluzione

Come avete i vostri dati di paese / città memorizzati (sono anche in Core Data)? Che determinerà alcuni dettagli qui, ma l'idea di base è che si utilizza attacchi di cacao per collegare ogni NSPopUpButton al contenuto di un NSArrayController.

cacao Associazioni non sono terribilmente semplice, ma in realtà funzionano come per magia una volta che si ottiene tutto configurato correttamente. Il guaio è che quando non si hanno le cose configurato correttamente, è difficile determinare che cosa sta andando male.

Ecco il setup generale:

Si configura il primo NSArrayController di essere il contenuto del tuo Paese di dati. Se si utilizza Core Data, poi si passa il contesto oggetto gestito e lo hanno preparare i propri dati per la vostra entità Country. In caso contrario, si dovrà legare il suo contenuto ad un array esistente di oggetti che implementano una Valore-chiave di codifica metodo compliant di accedere ai loro città collegate. Utilizzando i dati di base per l'origine dati qui renderà la vita più facile.

E poi si associa il secondo NSArrayController al ottenere il suo contenuto alla selection del primo, con il percorso tasto appropriato per le vostre città. Con Core Data, questa sarà la Content Set (dal momento che è non ordinata).


Modifica Bah, campi di commento sono del tutto privi di valore. Ecco una risposta adeguata al tuo primo commento:

Per modellare questa relazione in Core Data, devi per impostare il modello per assomigliare a questo:

Xcode modello Editor Schermata

E 'importante notare che ho dato i miei soggetti classi personalizzate (MBCountry e MBCity). Chiedendo Xcode per generare le classi per voi (selezionare l'entità, andate a New File ..., e si sceglie di cacao Classe -> Classe Managed Object), è possibile utilizzare metodi di accesso reali (invece di solo valueForKey:). (Per inciso, ho davvero un valore Mogenerator di Rentzsch che fa questo automaticamente per voi su ogni salvataggio.)

Ora che il modello è impostato, è possibile popolare l'archivio dati in questo modo:

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 è davvero via eccessivo qui. Tuttavia, sembra che si desidera utilizzare Core Data in altre sezioni del vostro programma, quindi questo fa per una grande opportunità di apprendimento. Ha una curva di apprendimento molto ripida (certamente uno degli aspetti più delicati delle API Cocoa), ma è fattibile. Basta tenere a sgobbare!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top