2011-11-22 10 views
8

Sto provando a passare un oggetto dalla mia classe di visualizzazione principale ad un altro destinatario di notifica in un'altra classe.Passare l'oggetto con NSNotificationCenter ad altra vista

Voglio passare un oggetto denominato country, che carica tutte le città da una richiesta SOAP nel controller principale e voglio inviarlo alla mia vista successiva.

paese = [[Assegnazione del paese] init];

Paese intestazione:

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

@property (nonatomic,retain) NSString *name; 

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

ho trovato un modo per passare i dati con NSNotificatios utilizza un NSDictionary in UserInfo. Ma non è possibile inviare l'intero oggetto invece di convertirlo in un NSDictionary? O qual è il modo migliore per trasferirlo? Sono bloccato cercando di capire come passare gli oggetti.

In realtà ho lavorato a questa semplice NSNotification sulla mia app.

NSNotification nell'attuazione principale View Controller:

//---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 in 2View realizzazione Controller:

// 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]; 

risposta

25

Oooooo, così vicino. Ho la sensazione che tu non capisca cosa sia un NSDictionary.

Inserisci di notifica con questo:

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]; 

quindi ottenere l'oggetto paese come questo:

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

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

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

Non è necessario per convertire il vostro oggetto in un NSDictionary. Invece, è necessario inviare un NSDictionary con il proprio oggetto. Ciò consente di inviare molte informazioni, tutte basate su chiavi nello NSDictionary, con lo NSNotification.

+0

Grazie! Funziona come un fascino. Ho frainteso il concetto di un NSDictionary ma so che è più chiaro. –

+0

Grazie, amico! Stavo usando il metodo sbagliato e ricevevo totalmente la notifica ma non l'userInfo. Saluti. – Felipe

4

Per Swift si può passare con dizionario usando il codice seguente

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

ad esempio

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

E leggere questo dizionario da

func updated(notification: NSNotification){ 

     notification.userInfo?["success"] as! Bool 
    } 
Problemi correlati