Domanda

stato alla ricerca di una soluzione per un lungo tempo ormai, ma ancora senza successo, forse qualcuno qui mi può aiutare.

ho creato un'applicazione che viene eseguita un filo che comunica con un server web in background. Di tanto in tanto il filo riceve informazioni che mi piacerebbe per visualizzare in un UITableView. A causa della natura dinamica del contenuto ho deciso un NSMutableArray dovrebbe essere sufficiente per memorizzare le informazioni dal server web.

Ogni volta che ricevo informazioni dal webservice mia AppDelegate invia una notifica. Il mio UITableView registra per ricevere certi tipi di informazioni che ho intenzione di mostrare nel UITableView.

Il metodo initWithStyle del UITableViewController contiene il seguente codice:

- (void)addContact:(NSNotification *)note {
    NSLog(@"%@", [note object]);

    NSString *message = (NSString *)[note object];
    NSString *name = [[message componentsSeparatedByString:@":"] objectAtIndex:2];

    contact = name;
    [array addObject:contact];
}   

- (void)viewDidLoad {
    [super viewDidLoad];

    array = [[NSMutableArray alloc] initWithObjects:@"test1", @"test2", nil];

    tv.dataSource = self;
    tv.delegate = self;

    self.tableView = tv;
}

La matrice in Agg.contatto contiene i dati visualizzati nel TableView. Tutti i dati aggiungo manualmente alla matrice in viewDidLoad: verrà mostrato nella tabella, ma non accade per i dati aggiunti nel Agg.contatto: metodo.

Qualcuno ha un idea di cosa sto facendo male?

È stato utile?

Soluzione

è l'aggiornamento accadendo sul thread principale? È possibile utilizzare questa sorta di funzione di aggiornamento per assicurarsi che lo fa.

- (void)refresh {
if([NSThread isMainThread])
{
    [self.tableView reloadData];
    [self.tableView setNeedsLayout];
    [self.tableView setNeedsDisplay];
}
else 
{
    [self performSelectorOnMainThread:@selector(refresh) withObject:nil waitUntilDone:YES];
}

}

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