0

Das ist mein AlertView Code:`UIAlertController` wird nicht ausgelöst, in NSNotification Antwort

- (void)initializeAlertControllerForOneButtonWithTitle:(NSString *)title withMessage:(NSString *)msg withYesButtonTitle:(NSString *)yesButtonTitle withYesButtonAction:(id)yesButtonAction 
{ 
    UIAlertController * alert = [UIAlertController 
           alertControllerWithTitle:title 
           message:msg 
           preferredStyle:UIAlertControllerStyleAlert]; 

    UIAlertAction* yesBtn = [UIAlertAction 
          actionWithTitle:yesButtonTitle 
          style:UIAlertActionStyleDefault 
          handler:^(UIAlertAction * action) { 
           if (self.activityIndicator.animating) { 
            [self.activityIndicator stopAnimating]; 
           } 

           if ([title isEqualToString:@"Wrong Password!"]) { 
            self.editTextField.text = @""; 
            [self.editTextField becomeFirstResponder]; 
           } 
          }]; 

    [alert addAction:yesBtn]; 

    [self presentViewController:alert animated:YES completion:nil]; 
} 

ich diese Warnung in meiner NSNotificatoin Response Methode Feuer versuchen. Mein Notification Response Code:

- (void)receiveSMSVerificationResponse:(NSNotification *)notification 
{ 
    SMSVerificationDigitClassModel *smsVerificationDigitClassModel = [[SMSVerificationDigitClassModel alloc] init]; 
    smsVerificationDigitClassModel = [notification object]; 

    if (smsVerificationDigitClassModel.viewControllerName == ViewControllerNameProfileInfoEditViewController) { 

     if ([self alreadyRegisteredPhoneNumber:smsVerificationDigitClassModel.phoneNumber] == YES) { 
      NSLog(@"jogajog"); 
      [self initializeAlertControllerForOneButtonWithTitle:@"Already Registered!" withMessage:kAlreadyRegisteredPhoneNumberMSGForChangePhoneNumber withYesButtonTitle:@"Ok" withYesButtonAction:nil]; 

     } else { 
      if ([AdditionalClasses internetConnectionCheck] == YES) { 
       self.userModelClass.phone_number = smsVerificationDigitClassModel.phoneNumber; 
       [self updateUserModel:self.userModelClass]; 
      } else { 
       [self noInternetConnectionAlert]; 
      } 
     } 
     //Check if that phone number is already used 
     // udate phone numner in server 
     // update phone number in core data 
     //[self goToSignUpViewControllerWithPhoneNumber:smsVerificationDigitClassModel.phoneNumber]; 
    } 
} 

ich es von Bruchstelle zu überprüfen, diese Linie [self initializeAlertControllerForOneButtonWithTitle:@"Already Registered!" withMessage:kAlreadyRegisteredPhoneNumberMSGForChangePhoneNumber withYesButtonTitle:@"Ok" withYesButtonAction:nil]; tatsächlich anruft, aber die Alarmansicht knallt nicht auf. Es heißt:

"Warnung: Versuch zu präsentieren, auf deren Sicht ist nicht in der Fensterhierarchie!"

Ich habe versucht Benachrichtigung Beobachter Methoden hinzuzufügen:

- (void)addNotificationObserver 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveUserModelResponse:) name:@"sendUpdateRequestToServerForPhoneNumberWithUserModel" object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveSMSVerificationResponse:) name:@"SMSVerificationForPhoneNumber" object:nil]; 
} 

In viewDidLoad, viewDidAppear & in viewWillAppear und removeObserver in dealloc,

- (void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"sendUpdateRequestToServerForPhoneNumberWithUserModel" object:nil]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"SMSVerificationForPhoneNumber" object:nil]; 
} 

aber es ist gar nicht angezeigt. Also, wie ändere ich meine window hierarchy! in diesem viewController. Wenn Sie verstehen, antworten Sie bitte zurück. Vielen Dank im Voraus.

Antwort

1

Rufen Sie die initializeAlertControllerForOneButtonWithTitle-Methode in einem Hauptwarteschlangen-Dispatch-Warteschlangenblock auf.

Alle UI-Betrieb sollte auf Hauptbedrohung sein.

dispatch_async(dispatch_get_main_queue(), ^{ 
     [self initializeAlertControllerForOneButtonWithTitle:@"Already Registered!" withMessage:kAlreadyRegisteredPhoneNumberMSGForChangePhoneNumber withYesButtonTitle:@"Ok" withYesButtonAction:nil]; 
});