0

这是我AlertView代码触发:`UIAlertController`不NSNotification响应

- (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]; 
} 

我想在我的NSNotificatoin Response方法来触发此警报。我Notification Response代码:

- (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]; 
    } 
} 

我检查从破发点,这条线其实[self initializeAlertControllerForOneButtonWithTitle:@"Already Registered!" withMessage:kAlreadyRegisteredPhoneNumberMSGForChangePhoneNumber withYesButtonTitle:@"Ok" withYesButtonAction:nil];呼吁,但警报视图不会弹出。它说:

“警告:尝试呈现其视图不在窗口层次结构中!”

我已尝试添加通知观测方法:

- (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]; 
} 

viewDidLoadviewDidAppear &在viewWillAppearremoveObserverdealloc

- (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]; 
} 

,但它没有显示在所有。那么,如何在viewController中更改我的window hierarchy!。如果您了解,请回复。非常感谢提前。

回答

1

在主队列调度队列块内调用initializeAlertControllerForOneButtonWithTitle方法。

所有UI操作应该是主要威胁。

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