Ошибка подтверждения в - [UIActionSheet showInView:] - PullRequest
0 голосов
/ 02 марта 2012

У кого-нибудь есть идеи, что это значит и как с этим разобраться?

* Ошибка подтверждения в - [UIActionSheet showInView:], /SourceCache/UIKit_Sim/UIKit-1912.3/UIActionSheet.m:4630 2012-03-02 17: 12: 34.643 Стратегия и риск [66854: 15803] * Завершение приложения из-за необработанное исключение 'NSInternalInconsistencyException', причина: 'Неверный параметр не удовлетворяет: view! = Nil'

Обновление: происходит только время от времени:

Обновление 2: в моем приложении нет панели вкладок или панели инструментов

Обновление 3: я изменил код для использования showInView: и получаю точно такое же сообщение об ошибке.

- (void)displayAddEntityActionSheet {

    //Convert the tap location to this view's coordinate systems
    CGRect buttonTappedRect = [self.currentNodeView convertRect:self.currentNodeView.frame toView:self.view];

    UIActionSheet *actionSheet;

    switch (self.currentNode.nodeType) {
        case NodeTypeEntity:
            actionSheet = [[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:nil 
                                        destructiveButtonTitle:nil otherButtonTitles:@"Entity", @"Objective", nil] autorelease];

            [actionSheet showFromRect:buttonTappedRect inView:self.view animated:YES];
            break;
        case NodeTypeObjective:
            actionSheet = [[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:nil 
                                        destructiveButtonTitle:nil otherButtonTitles:@"Risk", @"KPI", nil] autorelease];

            [actionSheet showFromRect:buttonTappedRect inView:self.view animated:YES];
            break;
        case NodeTypeRisk:
            actionSheet = [[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:nil 
                                        destructiveButtonTitle:nil otherButtonTitles:@"KRI", @"Control", nil] autorelease];

            [actionSheet showFromRect:buttonTappedRect inView:self.view animated:YES];
            break;
        case NodeTypeControl:
            actionSheet = [[[UIActionSheet alloc]initWithTitle:nil delegate:self cancelButtonTitle:nil 
                                        destructiveButtonTitle:nil otherButtonTitles:@"KCI", nil] autorelease];

            [actionSheet showFromRect:buttonTappedRect inView:self.view animated:YES];
            break;
        default:
            break;
    }
}

Ответы [ 3 ]

2 голосов
/ 02 марта 2012

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

[actionsheet showFromTabBar:]

или

[actionsheet showFromToolbar:]

Эта ошибка подтверждения связана с тем, что выв вашем приложении может быть панель вкладок, а в iPhone вы можете отображать лист действий, используя метод:

[actionsheet showInView:]

Если это так, вам следует использовать:

[actionsheet showFromTabBar:]

Надеюсь, это вам поможет.

РЕДАКТИРОВАТЬ-2:

[actionsheet showFromBarButtonItem:self.navigationItem.rightBarButtonItem animated:YES];

РЕДАКТИРОВАТЬ-3:

Сбой UIActionSheet на iPad / неiPhone

http://forums.macrumors.com/showthread.php?t=997125

1 голос
/ 05 марта 2012

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

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {

        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addNewEntity:) name:@"addSubEntity" object:nil];
    }

    return self;
}

Итак, я исправил ошибку, которая вызывает init несколько раз, и для безопасности я также вызываю removeObserver: на всякий случай, хотя этот контроллер представления используется повторно, поэтому он никогда не вызывается.

Мораль истории: удалите Observer перед освобождением!

- (void)viewDidUnload
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
0 голосов
/ 05 марта 2012

Вы еще не сказали, что уверены self.view! = Ноль. Кажется ясным, что это первое, что нужно сделать. Или проверьте, когда вы зависаете в отладчике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...