Вы действительно не хотите метод класса. Вы хотите каким-либо способом уведомить конкретный экземпляр ResultViewController
, который живет в вашем контроллере панели вкладок, чтобы он обновился. Компилятор жалуется на вас, потому что вы вызываете свой метод для класса, а не для конкретного экземпляра.
Самый простой и уродливый способ сделать это, основываясь на опубликованном вами коде:
[(ResultViewController*)[mainDelegate.tabBarController.viewControllers objectAtIndex:2] calculateAndDisplayScores];
// switch to results view
mainDelegate.tabBarController.selectedIndex = 2;
Но правильный способ сделать это, вероятно, состоит в том, чтобы иметь какой-то типовой объект (ы), где живет информация. Ваш пользовательский интерфейс ввода данных связывается с моделью, чтобы получить текущие данные и отменить изменения пользователя. Затем модель может уведомить любые заинтересованные стороны (например, ваш контроллер представления результатов), что новые данные доступны, и что они должны соответствующим образом обновить себя. Это уведомление может быть выполнено через отношения делегатов, используя NSNotificationCenter
или каким-либо другим способом, о котором вы только мечтали.
(Ради аргумента предположим, что это действительно метод класса. Классы в Objective-C на самом деле не имеют состояния, поэтому как метод класса будет сохранять результаты или обновлять ваш интерфейс?)