Приложение зависает при отключении контроллера модального представления на iPad

Это работает на iPhone BTW (оба работают под управлением iOS 5.1)

Мое приложение зависает, когда я звоню [self dismissModalViewControllerAnimated:NO];

Я пробовал много разных подходов:

Мой код, как у меня сейчас:

-(void) doneEditing:(NSString *)value
{
    [multiLineText dismissModalViewControllerAnimated:NO];
    self.currentActiveTextView.text = value;
    self.currentActiveTextView = nil;
}

- (void)textViewDidBeginEditing:(UITextView *)textView
{
    multiLineText = [[MultilineTextViewController alloc] init];
    multiLineText.delegate = self;
    multiLineText.text = textView.text;
    self.currentActiveTextView = textView;
    [self presentModalViewController:multiLineText animated:NO];
}

MultilineTextViewController.h

@protocol DoneEditing
    -(void)doneEditing:(NSString*)value;
@end

@interface MultilineTextViewController : UIViewController
{
    UITextView *inputText;
    id<DoneEditing> delegate;
}
@property (nonatomic, strong) NSString *text;
@property (nonatomic, strong) id<DoneEditing> delegate;
@end

Функция вызывается из кнопки "Готово"

-(void) done:(id)sender
{
    [delegate doneEditing:inputText.text];
}

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

if ([[self parentViewController] respondsToSelector:@selector(dismissModalViewControllerAnimated:)]){

    [[self parentViewController] dismissModalViewControllerAnimated:NO];

} else {

    [[self presentingViewController] dismissViewControllerAnimated:NO completion:nil];
}

Просто немного истории, когда пользователь нажимает UITextView, я использую, чтобы открыть новый ModalViewController, чтобы дать пользователю больше места для ввода большого количества текста, после завершения пользователь нажимает кнопку "Готово", и я вызываю метод делегата, чтобы поместить текст в исходную форму .

Если я изменю анимацию на да в любом из приведенных выше случаев, она все равно не сработает, но вместо зависания я получаю NSInternalInconsistencyException

Attempting to begin a modal transition from <WorkflowViewController: 0xc6846b0> to <MultilineTextViewController: 0xc64b960> while a transition is already in progress. Wait for viewDidAppear/viewDidDisappear to know the current transition has completed

Любые идеи?

Кажется, я не могу найти причину, по которой эта штука не работает ...


person Armand    schedule 30.03.2012    source источник


Ответы (7)


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

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

person tams    schedule 02.04.2012

Попробуй это:

[self dismissModalViewControllerAnimated:NO];
person beryllium    schedule 30.03.2012
comment
Я попытался отклонить модальное окно в моей функции done - думаю, в вашей функции done :) - person beryllium; 30.03.2012
comment
Ха-ха, просто попробовал там, но потом приложение просто зависает, ничего не делает и ни на что не отвечает - person Armand; 30.03.2012

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

Что-то вроде: [inputText resignFirstResponder];

person Sam    schedule 02.04.2012

попробуй это

[multiLineText popViewControllerAnimated: ДА];

person Senthilkumar    schedule 06.04.2012

Я не понимаю твою строчку

[multiLineText dismissModalViewControllerAnimated:NO];

так как multiLineText это ваш модальный контроллер представления, отклонение должно вызываться представившим его контроллером представления, то есть в вашем первом примере (поскольку вы установили делегата на представляющий контроллер представления)

[multiLineText.delegate dismissModalViewControllerAnimated:NO];

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

person Christian Fries    schedule 08.04.2012

В последних версиях iOS вы можете отправить сообщение dismissModalViewControllerAnimated: самому модальному окну.

Apple недавно поиграла с этим способом. Попробуйте отправить в модальное окно.

person Duncan C    schedule 08.04.2012

Попробуйте проверить, сколько раз вызывается doneEditing, например с NSLog там.

Изменить:

Попробуйте добавить задержку перед отклонением modalViewController:

[self performSelector:@selector(dismiss) withObject:nil afterDelay:1.0];

- (void)dismiss {
    [self dismissModalViewControllerAnimated:NO];
}
person ader    schedule 30.03.2012
comment
хорошо, действительно ли вызывается viewDidAppear в вашем WorkflowViewController? ох, и сколько раз вызывается textViewDidBeginEditing (возможно, вы представляете WorkflowViewController более одного раза). - person ader; 02.04.2012
comment
другая мысль, пробовали ли вы dismissModalViewControllerAnimated после небольшой задержки, например, через полсекунды. см. правку выше. - person ader; 02.04.2012