Есть несколько вещей, которые вы можете сделать. Один из них - иметь слабую ссылку на объект, метод которого вы хотите вызвать. В этом случае контроллер представления является объектом. Объявите assign
-able свойство MainViewController
(при условии, что это класс) в классе wifi и установите его в качестве контроллера представления во время инициализации. Поскольку у вас есть ссылка на контроллер представления, вы можете вызвать нужный метод в методе делегата.
Другой подход заключается в использовании Blocks
. Определение блока может быть -
typedef void (^UpdateHandler)(void);
...
@interface WiFiConnection:NSObject <...> {
...
UpdateHandler updateHandler;
}
...
- (void)setUpdateHandler:(UpdateHandler)handler;
@end
@implemention WiFiConnection
...
- (void)setUpdateHandler:(UpdateHandler)handler {
updateHandler = handler;
}
...
- (void)delegateMethodFromWhichYouWantToInvoke {
...
if ( updateHandler != NULL ) {
dispatch_async(dispatch_get_main_queue(), updateHandler);
}
}
...
@end
Теперь вы можете передать блок обновления во время инициализации,
WiFiConnection *connection = [[WiFiConnection alloc] init];
...
__block MainViewController *controller = self;
[connection setUpdateHandler:^{
[controller welcomeMessage];
}];
Наверное, там много всего. Дайте мне знать, если это все еще неясно. Читайте на GCD. Это очень мощный инструмент на мой взгляд.