дождаться окончания запроса перед выполнением инициализации просмотра таблицы - PullRequest
0 голосов
/ 13 октября 2011

следующий код использует ASIhttprequest для заполнения массива appData. Представление также включает просмотр таблицы, и когда запускается, сначала выполняется функция getData, но затем я бы хотел дождаться окончания запроса и заполнения appData, прежде чем выполнять методы init tableView. Теперь методы tableView выполняются до завершения запроса. Как это сделать? Спасибо.

  - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
            NSArray *datos = [[NSArray alloc] initWithObjects:(@"test"), nil];

            self.appData = datos;

            [datos release];

        }

        [self getData];

        return self;
    }

    - (void)getData
    {
        activityIndicator.hidden = NO;
        [activityIndicator startAnimating];

        NSURL *url = [NSURL URLWithString:@"http://test.com/iphone.php"];
        ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
        NSLog(@"URL = %@",url);

        [request setValidatesSecureCertificate:NO];
        [request setRequestMethod:@"POST"];
        [request setPostValue:@"admin" forKey:@"key1"];
        [request setPostValue:@"admin" forKey:@"key1"];
        [request setDelegate:self];
        [request startAsynchronous];  

    }


    - (void)requestFinished:(ASIHTTPRequest *)request {
        NSLog(@"%@", [request responseString]);
        //NSLog(@"Response %d ==> %@", request.responseStatusCode, [request responseString]);
        [activityIndicator stopAnimating];
        activityIndicator.hidden = YES;

        appData = [[request responseString] componentsSeparatedByString: @"#"]; 

        int x =0;

        while (x<[appData count] - 1)
        {
            NSLog(@"cells = %@",[appData objectAtIndex: x]);
            x = x+1;
        }

    }

1 Ответ

0 голосов
/ 13 октября 2011

У вас есть два варианта:

  1. вы распределяете и инициируете просмотр таблицы ПОСЛЕ того, как запрос был выполнен - ​​это невозможно, если вы использовали IB для создания таблицы
  2. вы возвращаете 0 в вашем методе UITableViewDelegate s - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section, пока запрос не будет завершен. Затем перезагрузите таблицу и верните фактическое количество записей.
...