2011-11-22 16 views
8

Estoy tratando de pasar un objeto de mi clase de vista principal a otro receptor de notificación en otra clase.Pasar objeto con NSNotificationCenter a otra vista

Quiero pasar un objeto llamado country, que carga todas las ciudades desde una solicitud SOAP en el controlador principal y quiero enviarlo a mi siguiente vista.

country = [[Country alloc] init];

cabecera País:

@interface Country : NSObject 
{ 
    NSString *name; 
    NSMutableArray *cities; 
} 

@property (nonatomic,retain) NSString *name; 

- (void)addCity:(Cities *)city; 
- (NSArray *)getCities; 
- (int)citiesCount;  
@end 

he encontrado una manera de pasar los datos con NSNotificatios está utilizando un NSDictionary de información del usuario. ¿Pero no es posible enviar el objeto completo en lugar de convertirlo a un NSDictionary? ¿O cuál es la mejor manera de transferirlo? Estoy atrapado tratando de descubrir cómo pasar los objetos.

En realidad tengo trabajando esta simple NSNotification en mi aplicación.

NSNotification en la aplicación principal Vista Controlador:

//---Call the next View--- 
DetailViewController *detail = [self.storyboardinstantiateViewControllerWithIdentifier:@"Detail"]; 
[self.navigationController pushViewController:detail animated:YES]; 

//--Transfer Data to2View 
[[NSNotificationCenter defaultCenter] postNotificationName:@"citiesListComplete" object:nil]; 

NSNotification en 2Ver aplicación Controlador:

// Check if MSG is RECEIVE 
- (void)checkMSG:(NSNotification *)note { 

    NSLog(@"Received Notification"); 
} 

- (void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(checkMSG:) 
               name:@"citiesListComplete" object:nil]; 

Respuesta

25

Ooooo, tan cerca. Tengo la sensación de que no entiendes lo que es NSDictionary.

Publica tu notificación con esto:

Country *country = [[[Country alloc] init] autorelease]; 
//Populate the country object however you want 

NSDictionary *dictionary = [NSDictionary dictionaryWithObject:country forKey:@"Country"]; 

[[NSNotificationCenter defaultCenter] postNotificationName:@"citiesListComplete" object:nil userInfo:dictionary]; 

a continuación, obtener el objeto país como este:

- (void)checkMSG:(NSNotification *)note { 

    Country *country = [[note userInfo] valueForKey:@"Country"]; 

    NSLog(@"Received Notification - Country = %@", country); 
} 

No es necesario convertir el objeto en un NSDictionary. En su lugar, debe enviar un NSDictionary con su objeto. Esto le permite enviar mucha información, todo basado en claves en el NSDictionary, con su NSNotification.

+0

Gracias! Funciona de maravilla. No entendí el concepto de NSDictionary, pero sé que es más claro. –

+0

¡Gracias, amigo! Estaba usando el método incorrecto y estaba recibiendo la notificación totalmente, pero no la userInfo. Aclamaciones. – Felipe

4

Para Swift Puede pasar diccionario con con el siguiente código

NSNotificationCenter.defaultCenter().postNotificationName(aName: String, object anObject: AnyObject?, userInfo aUserInfo: [NSObject : AnyObject]?) 

por ejemplo

NSNotificationCenter.defaultCenter().postNotificationName("OrderCancelled", object: nil, userInfo: ["success":true]) 

Y leer este diccionario de

func updated(notification: NSNotification){ 

     notification.userInfo?["success"] as! Bool 
    } 
Cuestiones relacionadas