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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top