reloadData после входа в приложение для iPhone - PullRequest
0 голосов
/ 25 мая 2011

У меня есть Логин , который инициируется на viewDidLoad основного приложения.Это означает, что numberOfRowsInSection в mainApp запускается до входа в систему и приводит к тому, что мой просмотр таблицы не заполняется.1014 * в viewWillAppear в главном приложении функция reloadData для выполнения numberOfRowsInSection после Login .Поэтому я вставил:

    [self.tableView reloadData];

... в viewWillAppear.Но это не позволяет запустить его после входа в систему.

Есть предложения?

Заранее спасибо.

ОБНОВЛЕНИЕ КОДА

Страница входа

    if (serverOutput != nil) {
    //UIAlertView *alertSuccess = [[UIAlertView alloc] initWithTitle:@"Congrats" message:@"You are authorised" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    //[alertSuccess show];
    //[alertSuccess release];

    LucentaAppDelegate *appDelegate = (LucentaAppDelegate *)[[UIApplication sharedApplication] delegate];
    appDelegate.userProducts = serverOutput;

    loginButton.enabled = FALSE;

    [self dismissModalViewControllerAnimated:YES];

Главный вид

    - (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];

LucentaAppDelegate *appDelegate = (LucentaAppDelegate *)[[UIApplication sharedApplication] delegate];
self.jsonArray = [appDelegate.userProducts JSONValue];

//[self.tableView reloadData];
[self performSelector:(@selector(refreshDisplay:)) withObject:(tableView) afterDelay:0.5];

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Test Alert" message:@"View Will Appear." delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: nil];
[alert show];
[alert release]; }

    -(void)refreshDisplay:(UITableView *)tableView {
[self.tableView reloadData];}

Ответы [ 2 ]

0 голосов
/ 25 мая 2011

Когда ваш вход в систему (начался в viewWillLoad) завершен, вы должны получить некоторый вызов обратного вызова делегата, который сообщит вам, что ваш запрос завершен. Вы обычно указываете delegate при создании запроса.

Если вы используете NSURLRequest и NSURLConnection, делегат указывается в одном из:

+ connectionWithRequest:delegate:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:

в зависимости от того, как вы создаете запрос, и обратный вызов делегата для переопределения равен connectionDidFinishLoading: (или connection:didFailWithError: в случае ошибок связи).

connectionDidFinishLoading: - правильное место, где вы должны выдать [self.tableView reloadData]; после обновления источника данных таблицы.

Если вы не используете NSURLRequest, обратный вызов делегата будет другим.

EDIT:

если ваш mainView получит необходимые ему данные JSon, вам нужно обновить источник данных таблицы и вызвать reloadData таблицы.

Действительно, вызов reloadData снова вызовет numberOfRowsInSection, но эта информация предоставляется вашим источником данных, поэтому, если он не обновляется для отображения новых данных, которые вы получили, он всегда будет отражать старое значение.

Не могли бы вы предоставить больше информации о вашем источнике данных?

0 голосов
/ 25 мая 2011

Это зависит от фактического кода вашего приложения.Я предлагаю просто добавить метод типа

- (void)loginSucceeded {
    [self.tableView reloadData];
}

в ваш контроллер представления и вызвать его после успешного входа в систему.Это также удобно, поскольку вам может потребоваться выполнить более сложные действия в этой ситуации при расширении приложения.

...