Invia NSNotification da classe a classe B
-
25-10-2019 - |
Domanda
Così ho un app con un acquisto in-app. L'acquisto In App è gestita in FirstViewController. Quando l'utente ha acquistato il prodotto, voglio inviare una notifica al mio MainTableViewController ricaricare i dati tabelle e mostrare i nuovi oggetti che sono stati acquistati per l'acquisto in-app. Quindi, fondamentalmente voglio inviare una notifica dalla classe A alla classe B e di classe B ricarica i dati del Tableview allora. Ho provato con NSNotificationCenter, ma senza successo, ma so che la sua possibile con NSNotificationCenter Io proprio non so come.
Soluzione
In classe A: inviare la notifica
[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
object:self];
In classe B: prima registrarti per la notifica, e scrivere un metodo per gestire la cosa
.
Si dà il selettore corrispondente al metodo.
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleUpdatedData:)
name:@"DataUpdated"
object:nil];
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
[self.tableView reloadData];
}
Altri suggerimenti
Ok io sono l'aggiunta di un po 'più di informazioni alla risposta di Vince
In classe A: inviare la notifica
[[NSNotificationCenter defaultCenter] postNotificationName:@"DataUpdated"
object:arrayOfPurchasedObjects];
In classe B: prima registrarti per la notifica, e scrivere un metodo per gestire la cosa
.
Si dà il selettore corrispondente al metodo. Assicurarsi che la classe B è allocato prima di inviare la notifica di notifica otherwie non funzionerà.
- (void) viewDidLoad {
// view did load
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleUpdatedData:)
name:@"DataUpdated"
object:nil];
}
-(void)handleUpdatedData:(NSNotification *)notification {
NSLog(@"recieved");
NSArray *purchased = [notification object];
[classBTableDataSourceArray addObjectsFromArray:purchased];
[self.tableView reloadData];
}
- (void) dealloc {
// view did load
[[NSNotificationCenter defaultCenter] removeObserver:self
name:@"DataUpdated"
object:nil];
[super dealloc];
}
Forse si tenta di inviare la notifica da un altro thread? NSNotification non sarà trasportato all'osservatore da un altro thread.