我有一个自定义数据控制器,我用于我的应用程序,在其中我有一些我设置的委托方法。他们都工作但不是我想要的时候。当我调用[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);
}
答案 0 :(得分:1)
在App Delegate中,您将DataController的委托设置为App Delegate。因此,被调用的委托方法需要在您的App Delegate类代码中。
在MasterViewController中,您将DataController的委托设置为MasterViewController,因此在MasterViewController类中调用DataController的委托方法。
您需要将DataController委托方法添加到App Delegate代码中,以便通过使用NSNotificationCenter来刷新表视图。或者最好让App Delegate告诉MasterViewController在其DataController上调用refreshData。