soporte reportar problemas problema pagos facturas facturacion factura apple iphone objective-c ios xcode segue

iphone - problemas - reportar un problema de apple



iOS 6-¿Puedo devolver datos cuando desenrollo un segmento? (6)

He creado un segmento de desenrollado simple utilizando las herramientas del guión gráfico. He creado el siguiente controlador de eventos en la vista a la que quiero desconectar:

-(IBAction)quitQuiz:(UIStoryboardSegue *)segue { NSLog(@"SEGUE unwind"); }

Esto se dispara correctamente y desenrolla el segmento (el mensaje se registra).

Cuando el usuario abandona el cuestionario, me gustaría volver a pasar algunos datos y he estado luchando para lograrlo. ¿Alguien puede aconsejar?


Agregue la función prepareForSeque en el controlador que se está cerrando.

- (void) prepareForSegue : (UIStoryboardSegue *) segue sender: (id) sender

Se llama a esta función antes de llamar al segmento de desenrollado (en su ejemplo, lo llamó quitQuiz). Como puede ver, también tiene un parámetro de remitente para que pueda averiguar quién llamó el desenlace y recopilar los datos relevantes en consecuencia.

Por ejemplo, en el video WWDC 407, si hiciera clic en el botón de reinicio, no configuraría la información de la cuenta y si hiciera clic en el botón "Hecho", lo haría.


Configure un delegado e informe al controlador de la vista de origen acerca de salir de la prueba y envíe los datos. No olvide configurar el controlador de vista de origen como el delegado del controlador de vista de destino.

// DestinationViewController.h @protocol DestingationDelegate; @interface ... @property (assign) id<DestinationDelegate> delegate; ... @end @protocol DestinationDelegate -(void)didQuitQuiz:(NSDictionary*)infoDict; @end // DestinationViewController.m -(IBAction)quitQuiz:(UIStoryboardSegue *)segue { NSLog(@"SEGUE unwind"); if (self.delegate) [self.delegate didQuitQuiz:infoDict]; } // SourceViewController.h #import DestinationViewController.h @interface SourceViewController : ViewController <DestinationDelegate> .... // SourceViewController.m -(void)didQuitQuiz:(NSDictionary *)infoDict { if (infoDict) { // do something with the data } } -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { ... destinationViewController.delegate = self; }


El paso de datos entre los controladores de vista se realiza con frecuencia utilizando protocolos. Aquí hay un ejemplo:

En el encabezado del controlador de la vista de prueba, declare una definición de protocolo similar:

@protocol JBQuizViewControllerDelegate <NSObject> @required - (void)quizController:(id)controller didQuitWithState:(NSString *)state; @end

En el método prepareForSeque: del controlador de vista de presentación, conecte el delegado:

JBQuizViewController *destination = (JBQuizViewController *)segue.destinationViewController; destination.delegate = self;

Luego, en su controlador de vista de presentación, maneje el método quizController:didQuitWithState: del protocolo delegado.

Finalmente, una vez que el usuario salga de su prueba, debe notificar al delegado que utiliza el protocolo, pasar el estado o los datos que desee exponer.


Gracias jeff Después de ver WWDC video 407 tengo una solución clara.

En el controlador de vista que es el objetivo del desenlace, debe crear un método que tome un solo parámetro UIStoryboardSegue y devuelva una IBAction. El UIStoryboardSegue tiene un método para devolver el controlador de vista de origen. Aquí está el ejemplo tomado del video (crédito a Apple).

- (IBAction)done:(UIStoryboardSegue *)segue { ConfirmationViewController *cc = [segue sourceViewController]; [self setAccountInfo:[cc accountInfo]]; [self setShowingSuccessView:YES]; }


Recuperar los datos de un segmento de desenrollado se explica muy bien en esta charla sobre la manzana, la segunda mitad de la presentation (edición: comienza desde 37:20)

En particular, en un segmento de desenvolvimiento, [segue sourceViewController] es el controlador de vista todavía activo desde el que se originó el evento de desenrollado, por lo que solo tiene que acceder a sus propiedades como de costumbre.


Si
Para eso, tendrá que crear propiedades, que retienen sus datos para ser enviados desde otro controlador de vista:

- (IBAction)unwindSelectFriendsVC:(UIStoryboardSegue *)segue { if ([segue.sourceViewController isKindOfClass:[ChildVC class]]) { ChildVC *child = (ChildVC *) segue.sourceViewController; //here we are passing array of selected friends by arrSelectedFriends property self.arrFriendList = child.arrSelectedFriends; [self.tableView reloadData]; } }