¿Cómo se configura un controlador de vista como delegado por dos cosas (como el LocationManager y el acelerómetro)?

StackOverflow https://stackoverflow.com/questions/1106852

Pregunta

Lo siento si mi pregunta del título parece fundamentalmente desinformados. Voy a explicar lo que estoy tratando de hacer.

He definido la siguiente subclase UIViewController, que lanza LocationManager, y tiene un botón de inicio de grabación para guardar una pista del GPS.

Ahora me gustaría también encender el acelerómetro y permitir al usuario grabar eso también.

Mi subclase ViewController es el delegado LocationManager, así que lo que se debe utilizar para el delegado del acelerómetro? ¿Puedo usar el mismo punto de vista, o tengo que definir una vista secundaria?

Esta es la interfaz para mi subclase UIViewController:

@interface RootViewController : UIViewController <CLLocationManagerDelegate> {
    NSMutableArray *eventsArray;
    NSManagedObjectContext *managedObjectContext;
    CLLocationManager *locationManager;
    BOOL recording;
    UILabel *pointLabel;
    UIButton *startStop;
}

-(void)toggleButton;

Me pueden enviar más de un código, si es necesario, pero creo que esto es todo lo que se aplica. Gracias por su ayuda, me acaba de entrar en el desarrollo del iPhone, y mi experiencia, si tengo alguna, se encuentra en lenguajes de programación puntero-menos:)

¿Fue útil?

Solución

Es perfectamente razonable tener un objeto controlador sea el delegado durante más de una cosa. El único truco sería si tanto su LocationManager y su acelerómetro sucede que tiene métodos de delegado que se superponen, es decir, si los dos de ellos requieren sus delegados a responder a un método con la misma firma.

Más allá de eso, sólo tendría que configurar su controlador de ser delegado por tanto, de la misma manera que lo creó para ser delegado por uno:

@interface Controller : UIViewController
    <CLLocationManagerDelegate, AccelerometerDelegate>
{
    ...
}

Y, más adelante:

[myLocationManager setDelegate:myController];
[myAccelerometer setDelegate:myController];

Por favor, disculpe la denominación. No sé la parte superior de la cabeza lo que son los nombres de las clases acelerómetro y LocationManager que necesita. Acabo de utilizar nombres descriptivos lo vinieron a la mente:)

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