0

У меня есть в моем AppDelegate в UIActionSheet, который вызывается:Вызов UIActionSheet, который помещен в AppDelegate снаружи AppDelegate

- (void)showActionSheet { 
    UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Call Lilly" otherButtonTitles:@"Email IMCLONE Trials", @"Email EmergingMed", nil]; 
    [sheet showFromTabBar:self.tabBarController.tabBar]; 
} 

Мне нужно вызвать его из AnotherViewController. В контроллере у меня есть:

[(LYAppDelegate *)[[UIApplication sharedApplication] delegate] showActionSheet]; 

... и это не работает. Я получаю ошибку:

[3990:207] *** Assertion failure in -[UIActionSheet _presentSheetFromView:above:], /SourceCache/UIKit_Sim/UIKit-1912.3/UIActionSheet.m:1747 

Я предполагаю, что проблема в том, что ссылка на self.tabBarController.tabBar не действует в рамках AnotherViewController, но это должно быть, правильно? В конце концов, я могу сделать что-то вроде self.tabBarController.selectedSegmentIndex = N в AnotherViewController без проблем.

Я даже попытался изменить showActionSheet: так, чтобы последняя строка была [sheet showFromView:self.window]. Конечно, мой _window должен быть доступен по всему миру?

У меня, очевидно, отсутствует что-то фундаментальное, но я не уверен, что это такое.

ответ

0

Вы уверены, что ваш AppDelegate соответствует протоколу UIActionSheetDelegate?

+0

Да, и я проверил его изнутри, вызвав 'showActionSheet' в' LYAppDelegate'. –

+0

И вы убедились, что вы вызываете это из основного потока? – deleterOfWorlds

+0

Должен ли я сделать что-нибудь необычное, чтобы назвать это из основного потока? Я вызываю его из 'AnotherViewController', используя' didSelectRowAtIndexPath'. Нет вызовов веб-сервисов, ничего не происходит асинхронно. Есть ли что-то еще, что я должен сделать, чтобы убедиться, что он вызван из основного потока? –