【问题标题】:`UIAlertController` is not triggered in NSNotification responseNSNotification 响应中未触发`UIAlertController`
【发布时间】:2017-06-15 16:13:30
【问题描述】:

这是我的AlertView 代码:

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

viewDidLoadviewDidAppearviewWillAppearremoveObserverdealloc

- (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!。如果你明白,请回复。非常感谢。

【问题讨论】:

    标签: objective-c nsnotificationcenter uialertcontroller nsnotifications presentviewcontroller


    【解决方案1】:

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

    所有 UI 操作都应处于主要威胁状态。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 2015-05-31
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多