Pregunta

Tengo dos controles en mi archivo Interface Builder, y para cada uno de esos controles he creado una clase delegada separada en el código (Control1Delegate y Control2Delegate).Creé dos "Objetos" en el generador de interfaces, los hice de ese tipo y les conecté los controles como delegados.Los delegados funcionan bien.Mi problema es que necesito compartir información de un delegado a otro delegado y no estoy seguro de cómo.

¿Cuál es la mejor manera de hacer esto?¿Combinar a los dos delegados en una clase o acceder de alguna manera a una tercera clase que ambos puedan leer?Como en realidad no estoy inicializando la clase en ninguna parte de mi código, no estoy seguro de cómo obtener una referencia a su instancia real (si existe una instancia real), o incluso acceder a la clase "principal" que vino el proyecto.

¿Fue útil?

Solución

Puede agregar salidas de cualquier delegado al otro delegado.Hay dos formas de agregar una salida a un objeto en IB (suponiendo que esté usando Xcode/IB versión 3.0 o posterior:

  1. Si aún no ha generado el código para sus clases de delegados, seleccione el delegado deseado y luego abra la pestaña "Identidad de objeto" en el inspector de IB.Agregue una "Salida de clase" de tipo NSObject.Luego debería poder configurar esta nueva salida para el otro delegado.Por supuesto, tendrá que generar el código para su clase delegada y agregar los archivos fuente generados a su proyecto Xcode antes de poder cargar el plumín.

  2. Si ya generó el código para la clase delegada (o agregó un NSObject a su NIB y configuró su Clase como una clase existente en su proyecto Xcode), agregue una variable de instancia a la clase delegada:

    IBOutlet id outletToOtherDelegate;

    Mientras su proyecto Xcode esté abierto (como lo indica la burbuja verde en la parte inferior izquierda de su ventana NIB), IB detectará automáticamente la nueva salida y le permitirá asignarla al otro objeto delegado en su NIB.

Cocoa conecta automáticamente estas salidas en el momento de carga de NIB.Una vez awakeFromNib se llama en instancias de sus objetos delegados, puede asumir que se han creado instancias de todos los demás objetos en el NIB y que todas las salidas se han conectado.No debe asumir un pedido en llamadas a awakeFromNib, sin embargo.

Otros consejos

Creo que puedes crear salidas en cada uno y vincularlas para que tengan los mismos datos todo el tiempo.Si hay un objeto modelo que necesitan compartir, está bastante ordenado.En realidad no sé cómo hacer esto;¡Creo que lo vi en un tutorial de iPhone una vez!

Actualmente no tengo mi Mac frente a mí porque estoy en el trabajo, pero ¿sería posible vincular una instancia de un delegado a un miembro del otro delegado?Esto sería similar a vincular un NSArrayController a un miembro de otra clase de controlador, por ejemplo.

Sin embargo, dependiendo de lo que estén haciendo las clases delegadas, si las tareas son similares, probablemente simplemente las combinaría en una sola clase.Eso eliminaría el problema por completo.

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