2015-05-17 4 views
0

Кажется, что вызов Alert в моем UIViewController вызывает ploblems с помощью currentViewController (... из-за того, что, возможно, непреднамеренно пытается представить один и тот же контроллер представления дважды в быстрой последовательности ...).Предупреждение не работает из-за presentViewController

Что я могу сделать против этой проблемы (... см. Код ниже) ???

Сообщение об ошибке:

<MyApp.MyViewController: 0x67544325620> which is already presenting (null) 

Код:

func textFieldShouldEndEditing(textField: UITextField) -> Bool { 

    if (textField.text.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) > 5) { 

     var alert = UIAlertController(title: "Warning", message: "Only Initials with maximal 5 letters allowed!", preferredStyle: UIAlertControllerStyle.Alert) 
     alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

     // that is where the problem seems to occur.... !!! Why ???? 
     self.presentViewController(alert, animated: true, completion: nil) 

     return false 
    } 
    return true 
} 
+0

"не работает" - в каком смысле? что происходит и что должно произойти? – luk2302

ответ

0

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

var alert = UIAlertController(title: "Warning", message: "Only Initials with maximal 5 letters allowed!", preferredStyle: UIAlertControllerStyle.Alert) 
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

    // assuming that this is the first time your controller is presented 

    println("is presenting \(presentedViewController)") //is nil 

    presentViewController(alert, animated: true, completion: nil) 

    //is now not nil 
    println("is presenting \(presentedViewController)")   

    //something bad happened and your application is trying to present the alert again, safe guard against presenting it twice by checking if presentedViewController is nil or not 
    if presentedViewController == nil { 
     presentViewController(alert, animated: true, completion: nil) 
    } 
0

Вам просто нужно представить уведомление на верхнем контроллере представления (presentedViewController).

+0

Что вы подразумеваете под «сверху» ?? – iKK

+0

, если вы используете «navigationController», чтобы нажать контроллер просмотра, чем вы должны представить оповещение на верхнем контроллере, «который находится сверху в стеке», или на «представленном контролере», если вы представляете контроллер вида –

+0

. Думаю, у моей проблемы больше что мой «textFieldShouldEndEditing» вызывается три раза - скорее всего, из-за того, что мой textField создается в коде (... или по какой-то причине). Поэтому подсказка от Фрэнки помогла мне на короткое время (т. Е. Если представленViewController == nil {...} – iKK

0

Попробуйте следующий код, чтобы показать UIAlertViewController

вызова сильфона линии:

[self showMessage:@"Message" withTitle:@"Title"]; 

Метод:

-(void)showMessage:(NSString*)message withTitle:(NSString *)title 
    { 
     UIAlertController * alert= [UIAlertController 
             alertControllerWithTitle:title 
             message:message 
             preferredStyle:UIAlertControllerStyleAlert]; 

     UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){ 

      //do something when click button 
     }]; 
     [alert addAction:okAction]; 
     [[[[[UIApplication sharedApplication] delegate] window] rootViewController] presentViewController:alert animated:YES completion:nil]; 
    }