2011-11-22 24 views
8

Próbuję przekazać obiekt z mojej głównej klasy widoku do innego odbiorcy powiadomienia w innej klasie.Przekaż obiekt z NSNotificationCenter do innego widoku

Chcę przekazać obiekt o nazwie country, który ładuje wszystkie miasta z żądania SOAP w głównym kontrolerze i chcę wysłać go do mojego następnego widoku.

country = [[Kraj przydział] init];

Kraj nagłówek:

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

@property (nonatomic,retain) NSString *name; 

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

znalazłem sposób, aby przekazać dane z NSNotificatios stosuje NSDictionary w userinfo. Ale nie można wysłać całego obiektu zamiast konwertować do NSDictionary? Lub jaki jest najlepszy sposób na przeniesienie go? Utknąłem próbując dowiedzieć się, jak przekazać przedmioty.

Właściwie pracowałem nad tym prostym programem NSNotification w mojej aplikacji.

NSNotification w realizacji Widok główny kontroler:

//---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 w 2View wdrożenie Kontroler:

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

Odpowiedz

25

Oooooo, tak blisko. Mam wrażenie, że nie rozumiesz, co to jest NSDictionary.

Dodaj swoje zgłoszenie z tym:

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

następnie uzyskać obiekt kraj tak:

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

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

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

Nie trzeba konwertować obiekt do NSDictionary. Zamiast tego musisz wysłać obiekt NSDictionary. Dzięki temu możesz wysyłać wiele informacji, wszystkie oparte na kluczach w NSDictionary, z twoim NSNotification.

+0

Dzięki! Działa jak marzenie. Źle zrozumiałem koncepcję NSDictionary, ale wiem, że jest bardziej zrozumiała. –

+0

Dzięki, kolego! Użyłem niewłaściwej metody i otrzymałem powiadomienie, ale nie userInfo. Twoje zdrowie. – Felipe

4

Dla Swift można przekazać słownika z wykorzystaniem poniższy kod

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

np

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

I przeczytać ten słownik z

func updated(notification: NSNotification){ 

     notification.userInfo?["success"] as! Bool 
    } 
Powiązane problemy