¿Pasar un diccionario entre dos controladores de vista?

Tengo una aplicación en la que tengo una llamada de servicio web que devuelve datos como un diccionario. Quiero acceder a este diccionario en otro controlador de vista para cargar los valores en una tabla.

¿Alguien puede demostrar cómo pasar este diccionario de respuestas de un controlador de vista a otro?

preguntado el 12 de junio de 12 a las 07:06

Usar funciones o NSUserDefaults o tomar el diccionario asignado y sintetizado en appdelegate, etc.

puede intentar usar protocolos para acceder a datos de otros controladores de vista. -

2 Respuestas

Podrías definir un NSDictionary propiedad en tu AnotherViewController y configurarlo desde el controlador anterior. Voy a dar un breve ejemplo a continuación.

//.h
@interface AnotherViewController {

  NSDictionary *data;
}
@property(nonatomic,retain) NSDictionary *data;
@end

//.m
@implementation AnotherViewController
@synthesize data;

Ahora desde el controlador actual, después de inicializar AnotherViewController configuras el diccionario antes de presentarlo.

AnotherViewController *controller = [[AnotherViewController alloc] init];
controller.data = myCurrentDictionary;

Actualmente AnotherViewController tiene un data propiedad con el valor del controlador anterior.

Espero que esto ayude.

Respondido el 12 de junio de 12 a las 07:06

Supongo que se llama al servicio web porque sucedió algo (se hizo clic en el botón, viewDidLoad/viewDidAppear). Si este es el caso, pasando una referencia del UIViewController a la clase de servicio web es una opción válida perfecta. Tenga en cuenta que para esta relación debe crear un protocolo, por lo que en su clase de servicio web tiene algo como esto:

id<ViewControllerResponseProtocol> referenceToViewController;

Este planteamiento de « ViewControllerResponseProtocoldefiniría un método como este:

-(void)responseFromWebservice:(NSDictionary*)myDictionary;

Entonces, cuando la clase de servicio web ha creado el NSDictionary puede el método anterior desde el referenceToViewController:

[referenceToViewController responseFromWebservice:myDictionary];

Si no existe ningún tipo de relación entre ambos, se utiliza could NSNotificationCenter para ello.

PS: La solución de skram es perfectamente válida si ya tienes la NSDictionary desde el servicio web en la inicial UIViewController y ahora quieres pasarlo a un nuevo UIViewController. Aunque no creo que eso sea lo que quieres.

Respondido el 12 de junio de 12 a las 08:06

como dice el OP, a él le gustaría "..access el diccionario en otro controlador de vista". Lo que significa que ya lo tiene. No creas que se pidió un voto negativo para eso :) - scram

Tiene donde? Si lo tiene en el UIViewControllerque inició la acción, debería acepta tu respuesta. - rui peres

another view controller significa que ya está en a controlador de vista y quiere los datos en another one - scram

Bueno, no te preocupes, estoy seguro de que tu respuesta será aceptada. También está asumiendo que el nuevo controlador de vista no existe (lo está creando). - rui peres

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