0

JSON フィードからの新しいデータでアプリをリロードしようとしています。やってみます;

- (void) Refresh {
[self performSelector:(@selector(refreshDisplay:)) withObject:(_tableView) afterDelay:0.5];
}

- (void)refreshDisplay:(UITableView *)tableView {

    [_tableView reloadData]; 
}

JSON のダウンロード:

     NSString *jsonString = [NSString 
                                stringWithContentsOfURL:[NSURL URLWithString:xmlDataUrl] 
                                encoding:NSUTF8StringEncoding
                                error:nil];

        SBJSON *parser = [[SBJSON alloc] init];
        NSDictionary *results = [parser objectWithString:jsonString error:nil];

        parser = nil;

        [self setTableData:nil];
        [self setTableData:[results objectForKey:@"feed"]];

しかし、JSONから新しいデータをリロードしていません。オンラインのJSONフィードからダウンロードしている新しいデータでテーブルビューを更新する方法を知っている人はいますか? JSON フィードから古いデータを削除し、新しいデータを挿入する必要があります。

4

2 に答える 2

0

データが実際に変更されていると確信していますか? メソッドにいくつかNSLogの s を配置-tableView:cellForRowAtIndexPath:して、確実に呼び出されるようにすることができます。あなたの問題は、0.5 秒後に更新するように単純に指示しているようで、それまでにデータが読み込まれない可能性があります。実際にデータの更新を終了するメソッドに呼び出しを入れることをお勧めします。これにより、[tableView reloadData]呼び出すまでにデータの更新が完了していることがわかります。

この方法にも注意してください。

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

必要ありません。まず、引数を無視しreloadDataて ivar を呼び出します_tableView。第二に、0.5 秒後にデータをリロードするだけの場合は、次のように呼び出すことができます。

[_tableView performSelector:@selector(reloadData) withObject:nil afterDelay:.5];

さらに、 ivar に直接アクセスすることを回避し、「適切な形式」と見なされるため、可能な限りどこでも使用した方がよい_tableView場合に呼び出されるという事実に基づいています。@synthesize tableView=_tableViewself.tableView

繰り返しますが、テーブルビューを呼び出す前に、データ ソースが実際にデータを更新していることを確認してくださいreloadData

編集

更新した投稿に、[self.tableView reloadData];JSON 解析コードの最後に追加するだけです。

于 2012-04-16T14:40:17.140 に答える
0

そのコードは、データソース オブジェクトが提供する必要があるデータを tableview に取得させますが、フィードからリロードすることは何もしません。UITableViewDataSource オブジェクトのメソッドが、更新された JSON フィードからデータを返していることを確認する必要があります。refreshDisplay メソッドは、テーブルに reloadData を指示する前に、まず JSON フィードから自身を更新するようにデータソースに指示することができます。

于 2012-04-16T14:45:32.903 に答える