Wie kann ich füllen eine UITableView, die mit Daten aus einer parse.com Abfrage nach der es gemacht ist, die im hintergrund laufen?
Ich habe eine UITableViewController
zuständig, die die Anzeige einer Tabelle voller Mitarbeiter. Diese Daten werden in einer Datenbank gespeichert sind auf parse.com.
Dies ist mein UITableViewController
, in der ich einfach initiieren den Shop:
-(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{
self = [super initWithNibName:nil bundle:nil];
if(self){
store = [[EmployeeStore alloc] init];
}
return self;
}
Dies ist die EmployeeStore
init-Methode, in der ich Abfrage für die Mitarbeiter:
-(id) init{
self = [super init];
if(self){
employees = [[NSMutableArray alloc] init];
[self fetchEmployeesFromDatabase];
}
return self;
}
fetchEmployeesFromDatabase
, wo ich die Abfrage für die Mitarbeiter.
-(void) fetchEmployeesFromDatabase{
PFQuery *query = [PFQuery queryWithClassName:@"Employee"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
//The find succeeded.
NSLog(@"Successfully retrieved %d scores.", objects.count);
//Do something with the found objects
for (PFObject *object in objects) {
NSLog(@"%@", object.objectId);
[employees addObject:object];
}
} else {
//Log details of the failure
NSLog(@"Error: %@ %@", error, [error userInfo]);
}
}];
}
Ich bin erfolgreich empfangen, jedoch das problem ist die Abfrage erfolgt im hintergrund und wird nicht abgeschlossen, bis nach der Ansicht Tabelle ist fertig beladen, so dass die Tabelle wird nicht ausgefüllt. Ich muss die Tabelle laden Sie Ihre Daten, nachdem die Abfrage abgeschlossen ist, aber wie gehe ich über das tun dies?
Du musst angemeldet sein, um einen Kommentar abzugeben.
UITableViewController
EmployeeStore.h
EmployeeStore.m
und fetchEmployeesFromDatabase
reloadData
Aufruf innerhalb der for-Schleife, legen Sie es außerhalb.Wenn das laden abgeschlossen ist, sagen die Tabellen-Ansicht zu laden.
Müssen Sie sicherstellen, dass Ihre Mitarbeiter store ist thread-safe oder nicht zugegriffen wird, durch den hintergrund und die wichtigsten threads gleichzeitig.
UITableViewController
Was bedeutet das genau? Ich habe nicht gelernt Blöcke noch. Eine kurze Erklärung wäre sehr hilfreich!Nun laden Sie Ihre tableview auf mainthread. Dies versuchen.
[self.aTableview performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
statt[self performSelectorOnMainThread:@selector(reloadTableView) withObject:nil waitUntilDone:NO];
?Hier die Daten wird aufgefüllt, in der Tabelle sogar vor der Tabellenansicht abgeschlossen ist.
Alles, was Sie hier tun müssen, ist platzieren Sie die Anweisung [self fetchEmployeesFromDatabase]; innen viewDidLoad() Methode oder die Methode, die unter Berufung auf Ihren Tisch Schöpfung .
Hatte ich dieses problem, außer für die Sammlung anzuzeigen. Nach viel Schmerz, diese hat den trick auf laden Sie die Daten über den Haupt-thread.