Ich habe eine Tabellenansicht in einem UIViewController und ich lade die Daten aus einer Datenbank. Aber wenn ich die App starte, ist der Tisch leer. Erst wenn ich auf den Tisch klicke, erscheinen die Daten. Kann mir jemand sagen, was ich ändern muss? Hier ist mein Code:Objective-C: TableView in UIViewController - Daten werden nur nach einem Klick geladen
#import "DashboardViewController.h"
#import <UIKit/UIKit.h>
@interface DashboardViewController()
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@property (strong, nonatomic) NSMutableArray *data;
@end
@implementation DashboardViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)viewWillAppear:(BOOL)animated{
[self data]; // ???
}
- (NSMutableArray *)data {
if(!_data){
_data = [[NSMutableArray alloc] init];
NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@"username"];
NSURLSession *session = [NSURLSession sharedSession];
NSString *url = [NSString stringWithFormat:@"http://www.example.net/getData.php?user=%@", username];
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:url] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSString *errorCode = [json valueForKey:@"error"];
if([errorCode isEqualToString:@"e0"]){
NSArray *myData = [json objectForKey:@"myData"];
for (int i = 0; i < [myData count]; i++) {
[_data addObject:[myData objectAtIndex:i]];
[self.tableView reloadData];
}
}
}];
[dataTask resume];
}
return _data;
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [self.data count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
cell.textLabel.text = [[self.data objectAtIndex:indexPath.row] objectForKey:@"name"];
return cell;
}
@end
nur schreiben [self.tableView reload]; aus Ihrer Schleife und wenn Bedingung. –