Метод делегата iOS не вызывается, когда нужно

У меня есть настраиваемый контроллер данных, который я использую для своего приложения, и в нем есть некоторые методы делегирования, которые я настроил. Все они работают, но не тогда, когда они мне нужны. Когда я вызываю [dataController refreshData], у меня есть метод делегата refreshDidStart и refreshDidFinishWithoutError. Я выделяю контроллер данных, устанавливаю для делегата значение self и вызываю refreshData в applicationDidFinishLaunching, но методы делегата не обновляют представления таблиц в контроллерах представления, когда выполнение метода завершено. Но когда я настраиваю обновление UIBarButtonItem для вызова [dataController refreshData], вызывается метод делегата 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);
}

person Jon Erickson    schedule 26.01.2013    source источник


Ответы (1)


В своем делегате приложения вы устанавливаете делегата DataController в качестве делегата приложения. Таким образом, вызываемые методы делегата должны находиться в коде класса делегата вашего приложения.

В своем MasterViewController вы устанавливаете делегатом DataController как MasterViewController, поэтому методы делегата DataController вызываются в классе MasterViewController.

Вам нужно будет добавить методы делегата DataController в код делегата приложения, чтобы инициировать обновление представления таблицы, возможно, с помощью NSNotificationCenter. Или, возможно, было бы лучше заставить делегата приложения сообщить MasterViewController о вызове refreshData для его DataController.

person Darren    schedule 26.01.2013