0

mainAppのviewDidLoadで開始されるログインがあります。これは、mainAppのnumberOfRowsInSectionがログインの前に実行され、テーブルビューが作成されないことを意味します。

私はJsonArrayをmainAppのviewWillAppearに持っており、ログイン後にnumberOfRowsInSectionも実行するreloadData関数を持っています。だから私は入れます:

    [self.tableView reloadData];

...ビューに表示されます。しかし、これはログイン後に実行されません。

助言がありますか?

前もって感謝します。

コードの更新

ログインページ

    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];}
4

2 に答える 2

0

これは、アプリの実際のコードによって異なります。私はただのような方法を置くことを提案します

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

ビューコントローラに接続し、ログインが成功した後に呼び出します。また、アプリが大きくなると、この状況でより複雑なアクションを実行する必要がある場合があるため、便利です。

于 2011-05-25T10:39:23.873 に答える
0

ログイン ( で開始viewWillLoad) が完了すると、リクエストが完了したことを知らせるデリゲート コールバック コールを取得する必要があります。通常delegate、リクエストを作成するときに を指定します。

NSURLRequest と を使用している場合NSURLConnection、デリゲートは次のいずれかで指定されます。

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

リクエストの作成方法と、オーバーライドするデリゲート コールバックがconnectionDidFinishLoading:(またはconnection:didFailWithError:通信エラーの場合) に応じて異なります。

connectionDidFinishLoading:[self.tableView reloadData];テーブル データ ソースを更新した後、 を発行する適切な場所です。

を使用していない場合NSURLRequest、デリゲート コールバックは異なります。

編集:

必要な JSON データを受け取った場合mainViewは、テーブル データ ソースを更新reloadDataしてテーブルを呼び出す必要があります。

実際、呼び出すreloadDatanumberOfRowsInSection再度呼び出す必要がありますが、この情報はデータ ソースによって提供されるため、受信した新しいデータを反映するように更新されていない場合は、常に古い値が反映されます。

データ ソースに関する詳細情報を提供していただけますか?

于 2011-05-25T10:52:51.293 に答える