2

Facebook アプリのようなサイドメニュー コントローラーを使用しているアプリケーションがあります。基本的には、ビューでUITableViewController使用[self.tableView reloaddata]しているときに初めてメソッドが表示され、正常に動作します。いくつかの要件のために、このテーブル ビューをリロードする必要があります。別のView Controller.soから私はこれをやった:

 SideMenuViewController *second = [[SideMenuViewController alloc]init];
 [second viewWillappear:YES]

データをリロードしていますが、これを行っているとき、reloaddata は tableviewcontroller の cellforindex メソッドを呼び出していませんが、numberOfRowsInSection メソッドを呼び出しています。

4

5 に答える 5

3

これに通知を使用できます。

SideMenuViewController の viewDidLoad メソッドで、これを追加します。

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

reloadTable メソッドは次のようになります。

-(void)reloadTable {
dispatch_async(dispatch_get_main_queue(),^{
  [self.tableView reloadData];
});
}

テーブルを更新する場合は、アプリ内の任意の場所からこの通知を投稿するだけです。

[[NSNotificationCenter defaultCenter] postNotificationName:[NSNotification notificationWithName:@"SideMenuShouldRefreshDataNotification" object:nil]];
于 2012-11-24T08:49:56.023 に答える
0

このコードは、tableView をリロードしません。

SideMenuViewController *second = [[SideMenuViewController alloc]init];
[second viewWillappear:YES]

SideMenuViewControllerここでは、クラスの新しいインスタンスを作成しているためです。reloadData を呼び出すと、前の tableView インスタンスは更新されません。

また、デリゲート メソッドを強制的に呼び出すのviewWillappearは悪い習慣です。

解決:

SideMenuViewControllerviewController の @interface で のインスタンスを宣言し、そのプロパティを記述します。そのビューに移動したら、SideViewControllerインスタンスを設定します。ユーザーが戻るボタンを押すと、次のように呼び出します。

[sideViewControllerObject.tablView reloadData];
于 2012-11-23T09:51:42.773 に答える
0

新しいインスタンスを作成してそのメソッドを呼び出しても、古いインスタンスが更新されることはありません。新しいインスタンスを作成する代わりにrefreshData、既存のインスタンスを呼び出します。TableView

于 2012-11-23T08:29:02.687 に答える
0

プロトコル デリゲートを使用してリロードします。別のView Controllerは、使用している方法でviewWillAppearを呼び出すことができない場合があります。テーブルビューを持つコントローラーに戻るデリゲートを記述して、テーブルビューを再ロードします。

それが役に立てば幸い。

于 2012-11-23T08:30:18.700 に答える
0

このように試して、以下を確認してください。

[[self yourtableviewname] reloadData];
于 2012-11-23T08:23:50.570 に答える