3

UITableViewXMLソースからロードされているセルデータをリロードしようとして問題が発生しました。

これがシナリオです。アプリにはタブが含まれています。そのうちの1つには、XMLファイルからデータを取得して問題なく機能するテーブルビューがありますが、フィードカテゴリを変更し、別のタブからXMLを変更したい場合は、現在のテーブルビューを更新できます。 。タブを切り替えるために私は使用します

self.tabBarController.selectedIndex = 1;

カテゴリフィードをロードしたい他のタブに渡します

xmlParser = [[XMLParser alloc] loadXMLByURL:categories];

そして、渡された新しいフィードではなく、同じ古いフィードをロードします。で確認しNSLogたところ、フィード値は正しく通過しましたが、切り替えた後はロードされません。

[self.tableView reloadData];また、現在のタブとカテゴリタブの両方から試しましたが、どちらも機能しませんでした。

4

3 に答える 3

4

NSNotificationsを使用して、他のタブから通知を送信し、その通知に応答するオブザーバーをテーブルビューに含めることができます。

(タブはテーブルビューのリロードを呼び出します)データをリロードしたいときはいつでもこのコードを置くので、ボタンが押されたときやダウンロードが終了したときなど。

NSNotification * notification = [NSNotification notificationWithName:@"updateTable" object:nil];
[[NSNotificationCenter defaultCenter] postNotification:notification];

UITableViewController / UITableViewを持つクラスで、次のようにします。

viewDidLoadに追加:

[[NSNotificationCenter defaultCenter] addObserver:self  selector:@selector(updateTableView) name:@"backtolist" object:nil];

次に、関数updateTableViewを追加します

- (void) updateTableView: (NSNotification*) note
{
    //Do whatever needs to be done to load new data before reloading the tableview
    [_tableView reloadData];
}

お役に立てれば

于 2012-12-19T14:03:44.553 に答える
1

通知を使用するという Ophychius の提案は正しかった。XML の読み込みが完了した時点で、テーブル ビューのすべてのデータ ソースが更新されていると想定しています。これは、動的セルを使用していることも前提としています。XML をロードするクラスで、新しい XML のロードが完了したときに通知を投稿します。

    [[NSNotificationCenter defaultCenter] postNotificationName:@"XMLLoaded" object:nil];

XML クラスから投稿した Notification のオブザーバーとして、Table View クラスに登録します。

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadTable:) name:@"XMLLoaded" object:nil];

ご覧のとおり、この通知を受け取るとセレクターが呼び出されます。テーブルを構築するメソッドを呼び出すか、別の単純なメソッドを作成して reloadData を呼び出します。

-(void)reloadTable:(NSNotification *)notif
{
    NSLog(@"In ReloadTable method. Recieved notification: %@", notif);

    [self.tableView reloadData];
}

最後に (Leonardo が以下で指摘したように)、viewDidUnload (または ios6 の dealloc) メソッドで、その通知のオブザーバーとしてクラスを削除します。

- (void)viewDidUnload
{
    [super viewDidUnload];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
于 2012-12-19T15:33:35.610 に答える
0

残りのコードを見たことがなく、推測しているだけです。

テーブルビューにNSArrayデータソースがあると思いますが、配列データソースも更新されていることを確認しましたか?xmlパーサーまたはコントローラーはそれらのデータをNSArrayに転送しますか?

これは、reloadDataを呼び出すと、同じ配列が再フェッチされるためです。また、更新されていない場合は、古いデータを取得します。

于 2012-12-19T15:31:03.903 に答える