0

アプリケーションに使用するカスタムデータコントローラーがあり、その中にいくつかのデリゲートメソッドを設定しています。それらはすべて機能しますが、私も必要なときに機能しません。[dataController refreshData]を呼び出すと、デリゲートメソッドrefreshDidStartとrefreshDidFinishWithoutErrorがあります。データコントローラーを割り当て、デリゲートをselfに設定し、applicationDidFinishLaunchingでrefreshDataを呼び出しますが、メソッドの実行が完了したときに、デリゲートメソッドがビューコントローラーのテーブルビューを更新しません。しかし、[dataController refreshData]を呼び出すように更新UIBarButtonItemを設定すると、refreshDidFinishデリゲートメソッドが呼び出され、想定されていることを実行します。私が使っているスプリットビューコントローラーと関係があると思います。以下はコードです:

アプリデリゲート:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    dataController = [[DataController alloc] init];
    [dataController setDelegate:self];
    [dataController refreshData];

}

MasterViewController:

- (void)viewDidLoad
{
    [super viewDidLoad];

    dataController = [[DataController alloc] init];
    [dataController setDelegate:self];

    self.tableView.backgroundView = nil;
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"texture3.png"]];
}

- (void)refreshDataDidStart:(DataController *)view {

    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.labelText = @"Loading";
}

- (void)refreshDataDidFinishWithoutError:(DataController *)view {

    [callsTableView reloadData];
    [MBProgressHUD hideHUDForView:self.view animated:YES];
}

- (void)refreshDataDidFailWithError:(DataController *)view withError:(NSError *)error {

    [MBProgressHUD hideHUDForView:self.view animated:YES];

    NSLog(@"%@", error.localizedDescription);
}
4

1 に答える 1

1

App Delegateで、DataControllerのデリゲートをAppDelegateに設定します。したがって、呼び出されるデリゲートメソッドは、AppDelegateクラスコードに含まれている必要があります。

MasterViewControllerでは、DataControllerのデリゲートをMasterViewControllerに設定しているため、DataControllerのデリゲートメソッドはMasterViewControllerクラスで呼び出されます。

おそらくNSNotificationCenterを使用して、DataControllerデリゲートメソッドをApp Delegateコードに追加して、テーブルビューを更新するトリガーを作成する必要があります。または、AppDelegateにMasterViewControllerにDataControllerでrefreshDataを呼び出すように指示させる方がよいかもしれません。

于 2013-01-26T22:55:40.360 に答える