Попытка отладки ошибки «Ошибка подтверждения в - [UIActionSheet showInView:]» - PullRequest
3 голосов
/ 01 июня 2010

Я прорабатываю «Начало разработки приложений для iPad» и зацикливаюсь на главе 3, где создал проект, который работает с листом действий.

В моем нынешнем виде мое приложение загружается в симулятор без ошибок, о которых я знаю, но при запуске происходит сбой, и в окне отладчика появляются следующие ошибки:

2010-05-31 19: 44: 39.703 UsingViewsActionSheet [49538: 207] *** Утверждение ошибка в - [UIActionSheet showInView:], /SourceCache/UIKit_Sim/UIKit-1145.66/UIAlert.m:7073

2010-05-31 19: 44: 39,705 UsingViewsActionSheet [49538: 207] *** Завершение приложения из-за необработанного исключения NSInternalInconsistencyException, причина: «Недопустимый параметр не удовлетворительно: вид! = ноль

Я уверен, что в этом блоке происходит сбой приложения на основе моего использования точек останова.

// Реализовать viewDidLoad, чтобы выполнить дополнительную настройку после загрузки представления, обычно с кончика.

- (void)viewDidLoad { UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"This is my Action Sheet!" delegate:self cancelButtonTitle:@"OK" destructiveButtonTitle:@"Delete Message!" otherButtonTitles:@"Option 1", @"Option 2", @"Option 3", nil];</p> <pre><code>[action showInView:self.view]; // <-- This line seems to trigger the crash.... [action release]; [super viewDidLoad];

}

Я что-то упускаю из виду, или проблема в чем-то большем, чем показано здесь? Я посмотрел на реферат для showInView и пока не могу ничего предугадать.

Я ценю любую помощь.

С уважением,

Стив О'Салливан

Ответы [ 5 ]

11 голосов
/ 02 июня 2010

В методе viewDidLoad представление не настроено полностью. Свойство окна не подключено.

NSLog(@"View: %@; Window: %@",[self.view description], [self.view.window description]);

вероятно покажет, что окно имеет значение null / nil.

В зависимости от вашего дизайна, вам может повезти, просто поставив его в очередь в главном потоке:

-(void) showMyActionSheet
{
    UIActionSheet *action = [[UIActionSheet alloc] initWithTitle:@"This is my Action Sheet!" delegate:self cancelButtonTitle:@"OK" destructiveButtonTitle:@"Delete Message!" otherButtonTitles:@"Option 1", @"Option 2", @"Option 3", nil]; 
    [action showInView:self.view];
    [action release];
}

- (void)viewDidLoad 
{
    [super viewDidLoad]; 
    [self performSelectorOnMainThread:@selector(showMyActionSheet) withObject:nil waitUntilDone:NO];
}
1 голос
/ 01 июня 2010

У меня только что была такая же проблема. Я конвертировал существующее приложение для iPhone в универсальный. У меня есть несколько кнопок, которые называются UIAlertViews, которые работают нормально, но у меня есть кнопка, которая вызывает лист действий. Он генерировал ту же ошибку. В IB в моем ipadview.xib в моем контроллере представления я неправильно связал «представление» с окном, когда я должен был связать его с кнопкой. Теперь работает нормально. Надеюсь это поможет. (ps, я полный новичок, так что прости, если это не поможет) Neil

0 голосов
/ 12 июня 2014

Я недавно исправил ошибку подтверждения для ActionSheet, например:

UIWindow* window = [[[UIApplication sharedApplication] delegate] window];
    if ([window.subviews containsObject:self.view]) {
        [action showInView:self.view];
    } else {
        [action showInView:window];
    }

У меня отлично работает.

0 голосов
/ 14 февраля 2012

Просто для тех, кто поздно приходит к этой теме, это все еще проблема в 5.0 (9A334) симуляторе iPad и физических устройствах (iPad).

Ответ от Eiko остается правильным.

0 голосов
/ 29 июня 2010

Я просто работал над той же главой, и автор книги обращается к ней здесь http://p2p.wrox.com/book-beginning-ipad-application-development/79379-ch-3-usingviews-alert-actionsheet.html, хотя на вашем месте я бы проголосовал за ответ Эйко, поскольку он завершает поведение, к которому идет пример, тогда как Авторы попросили вас создать кнопку, которую вы щелкнули после запуска приложения, чтобы увидеть лист.

...