¿Qué hace exactamente el delegado en el proyecto xcode ios?

Acabo de aprender a desarrollar aplicaciones para iPhone, pero me cuesta entender lo que realmente significa delegado. ¿Alguien puede decirme con un ejemplo qué hace y qué tan importante es? ¡Gracias por cualquier ayuda!

preguntado el 27 de agosto de 11 a las 16:08

Por favor mira: stackoverflow.com/questions/7118598/… ¡y recuerde buscar antes de publicar! :) -

¿Alguna otra pregunta sobre los delegados? ¿Tiene sentido la respuesta? -

Ver también enlace. -

3 Respuestas

Es un concepto clave para comprender conceptualmente, por lo que es importante entender cómo pensar en él antes de los detalles técnicos. En pocas palabras, un delegado es una devolución de llamada.

Dos escenarios principales para usar delegados:

  1. Una clase o control quiere abstraer los detalles sobre cómo hacer el trabajo (como recuperar datos).
  2. Permita que otros conecten código a una canalización.

Ejemplos: UITableView: una vista de tabla es solo un control que sabe cómo representar una lista de celdas. Maneja todo el trabajo pesado de renderizado, desplazamiento, etc. Pero, no tiene idea de cómo cargar sus datos. Entonces, implementa un delegado de fuente de datos que tiene métodos para obtener los datos de la celda para una fila determinada, etc. Simplemente use el control y conecte los detalles para sus datos. UITableView hará todo por usted ... solo responda algunas preguntas específicas para. Un delegado responde esas pocas preguntas específicas.

Un control de texto: agrega un control de texto a su vista y ¡listo! puede escribir en él y todo está bien. Pero, ¿qué pasa si quieres hacer algo cuando comienzan a escribir o cuando terminan de escribir? Bueno, el control de texto ofrece un delegado con métodos que le permiten conectarse al canal de ejecución del control de texto. Permite que el control de texto haga todo por usted y le permite insertar código donde lo necesite. Muchas veces, hay una forma de insertar código para tomar una decisión sobre si algo está permitido. El control volverá a llamar y preguntará, ¿debería poder hacer x? Puede insertar código e influir en el comportamiento.

Si está creando un control o una clase, puede crear su propio protocolo, delegados de fuentes de datos, etc. para que su control pueda centrarse en hacer lo que se anuncia. Por ejemplo, digamos que desea crear un control de tareas. Tú podrías:

Primero, cree un contrato. Oye, si vas a proporcionar datos para mi control, estas son las preguntas que te voy a hacer. Lo tomaré de ahí ... En este caso, le voy a preguntar el número de tareas y voy a pedirle que me dé una tarea dado el número de fila.

@protocol XXTaskBoardDelegate <NSObject>
-(NSInteger*)getTaskCount;
-(XXTask*)getTaskForRow:(NSInteger*)rowNumber;
@end

En el control o la clase, proporcione al consumidor una forma de darnos la clase de fuente de datos delegada que responderá las preguntas que hará el control. En este punto, el control es un control puro. No sabe nada sobre cómo obtiene sus datos. Está pidiendo un objeto (id) que implemente un contrato / protocolo. identificación

@implementation XXTaskBoard
- (void)setDelegate:(id<XXTaskBoardDelegate>)newDelegate
{
    // the control stores the delegate so it can callback and ask you questions.
}

Luego, para la clase delegada, en el encabezado declara que implementas ese protocolo formal y en el archivo m de implementación proporcionas el código.

@interface AppController : NSObject<XXTaskBoardDelegate> 
{
    //...
}

luego, impleméntelo en la implementación

@implementation AppController
- (NSInteger*)getTaskCount
{
    return [model queryTaskCount];
}

- (XXTask*)getTaskForRow:(NSInteger*)rowNumber
{
    return [[model tasks] getItem:(NSInteger*)rowNumber];
}

Respondido 27 ago 11, 20:08

Un delegado es un objeto al que otra clase puede pasar mensajes. En la práctica, las clases de delegados deben ajustarse a un protocolo de delegado.

Por ejemplo, tomaremos una subclase de un controlador de vista de tabla. Este es un delegado para su vista de tabla. Primero define que es un delegado de vista de tabla haciendo esto:

MyTableViewController : UITableViewController <UITableViewDelegate>

Esto dice esa clase MyTableViewController es una subclase de UITableViewController y CONFORME a la UITableViewDelegate protocolo.

Ubicación. [tableView setDelegate:self] (o definiéndolo como tal en IB) luego pasa el self objeto a la vista de tabla para que la vista de tabla le envíe mensajes.

El mensaje principal que envía es el didSelectRowAtIndexPath mensaje que le dice a su clase que el usuario ha presionado una celda de vista de tabla.

Entonces, el objeto que toma el evento de clic (la vista de tabla) transmite el mensaje de que se ha hecho clic en la celda al objeto delegado (que en este caso es su MyTableViewController objeto).

Existen protocolos de delegado para que pueda asegurarse de que el objeto delegado tenga los métodos necesarios para tratar sus mensajes. Los métodos en un protocolo delegado pueden ser @optional o se hace cumplir. No es necesario definir ningún método que sea opcional. En tus MyTableViewController clasifica el método didSelectRowAtIndexPath es opcional, no es necesario que lo tenga. Si la vista de tabla no encuentra el método, simplemente no lo llamará.

Sin embargo, el cellForRowAtIndexPath es necesario y sin él su aplicación no se compilará.

Espero que esto te ayude y sea sencillo para ti. Si necesita más información, hágamelo saber.

Respondido 27 ago 11, 20:08

Los delegados son solo una forma de obtener devoluciones de llamada de algo. Pasas un delegado (un puntero a un objeto que se ajusta a un protocolo) a algo y cuando tiene nuevos datos para ti o cuando ocurre un evento, algo realiza una llamada de método en el delegado.

Por ejemplo, cuando ocurren eventos, como que su aplicación se coloca en segundo plano o la aplicación está a punto de finalizar, el objeto UIApplication llamará al delegado de su aplicación para informarle. Cuando un CLLocationManager tiene una nueva posición GPS, llamará a su delegado para pasarle la nueva posición. UITableViews llama a sus delegados para que UITableViewCells se muestre en la tabla. Hay muchos usos de delegados en iOS.

Respondido 27 ago 11, 20:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.