Pregunta

Deseo hacer un selector ciudad / país utilizando 2 NSPopupButtons. Un botón emergente contendrá la primera parte, por ejemplo, Reino Unido, y el segundo contendrán la segunda parte, por ejemplo, Londres Así que toda la ciudad / país combo leerá: Reino Unido Londres sin embargo, quiero la segunda parte que se actualiza cuando se selecciona la primera parte, por ejemplo, Si se selecciona Londres, las posibles opciones en la segunda popupbutton serán Londres, Birmingham, Manchester, etc., mientras que si se eligió Italia, el segundo popupbutton mostrará países como Venecia, Milán, etc.

A continuación, me gustaría almacenar estos datos en un solo atributo en la base de datos. a que se sumen a los dos juntos, y la tienda "UK Londres" en un atributo llamado "lugar".

¿Puede alguien darme un poco de ayuda en cuanto a cómo implementar esto, por favor?

Gracias!

¿Fue útil?

Solución

¿Cómo se tiene almacenados los datos del país / ciudad (son también en el núcleo de datos)? Que determinarán algunos de los detalles aquí, pero la idea básica es que utiliza enlaces de Cocoa de vincular cada NSPopUpButton con el contenido de un NSArrayController.

de cacao enlaces no son terriblemente sencilla, pero que en realidad funcionan como magia una vez que se ha configurado todo correctamente. El problema es que cuando usted no tiene las cosas configuradas correctamente, es difícil determinar lo que está mal.

Esta es la configuración general:

Se configura el primer NSArrayController sea el contenido de su Datos del país. Si utiliza la base de datos, entonces se le pasa el contexto objeto administrado y tienen que preparar sus propios datos para su entidad Country. De lo contrario, tendrá que unirse a su contenido a una matriz existente de objetos que implementan un valor-clave método de codificación compatible de acceder a sus ciudades vinculadas. Utilizando los datos básicos para la fuente de datos que aquí le hará la vida más fácil.

Y luego enlazar el segundo NSArrayController al obtener su contenido de la selection de la primera, con la ruta tecla adecuada a sus ciudades. Con base de datos, este será el Content Set (ya que es desordenada).


Editar Bah, campos de comentarios son completamente inútiles. He aquí una respuesta adecuada a su primer comentario:

Para modelar esta relación en la base de datos, usted configurar su modelo a tener este aspecto:

Xcode Editor del modelo de pantalla

Es importante tener en cuenta que yo he dado mis entidades clases personalizadas (MBCountry y MBCity). Al pedir a Xcode para generar las clases para usted (selecciona la entidad, ir a Archivo Nuevo ..., y elegir la clase Cacao -> clase de objeto gestionado), puede utilizar métodos de acceso reales (en lugar de sólo valueForKey:). (Dicho sea de paso, realmente valoro Mogenerator de Rentzsch que hace esto automáticamente para usted en cada guardar.)

Ahora que su modelo está configurado, puede instalar en el almacén de datos de esta manera:

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];
    }
}

Datos Básicos realmente es manera exageración aquí. Sin embargo, parece que desea utilizar de Datos Básicos en otras secciones de su programa, así que esto lo convierte en una gran oportunidad de aprendizaje. Tiene una curva de aprendizaje muy empinada (sin duda uno de los aspectos más delicados de la API Cocoa), pero es factible. Sólo mantener tapar lejos!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top