想要的时候没有调用iOS委托方法

时间:2013-01-26 22:42:23

标签: ios methods delegates instance-methods

我有一个自定义数据控制器,我用于我的应用程序,在其中我有一些我设置的委托方法。他们都工作但不是我想要的时候。当我调用[dataController refreshData]时,我有一个委托方法refreshDidStart和refreshDidFinishWithoutError。我分配数据控制器,将委托设置为self并在applicationDidFinishLaunching中调用refreshData,但是当方法执行完毕时,委托方法不会刷新视图控制器中的tableviews。但是当我设置刷新UIBarButtonItem来调用[dataController refreshData]时,会调用refreshDidFinish委托方法并执行所谓的操作。我相信它与我正在使用的分割视图控制器有关。以下是代码:

App Delegate:

- (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);
}

1 个答案:

答案 0 :(得分:1)

在App Delegate中,您将DataController的委托设置为App Delegate。因此,被调用的委托方法需要在您的App Delegate类代码中。

在MasterViewController中,您将DataController的委托设置为MasterViewController,因此在MasterViewController类中调用DataController的委托方法。

您需要将DataController委托方法添加到App Delegate代码中,以便通过使用NSNotificationCenter来刷新表视图。或者最好让App Delegate告诉MasterViewController在其DataController上调用refreshData。