不建议在分离的视图控制器上显示视图控制器 - 屏幕视图变为黑色

时间:2016-03-25 07:54:04

标签: ios swift mobile

我有两个视图控制器:VC1和VC2。从VC1,按一个按钮将应用程序导航到VC2。 VC2在viewDidLoad()中具有网络请求功能,如果请求失败则显示警报。

如果一切正常,VC2上没有请求失败,当我回到VC1时,它会调用VC2的deinit功能。

但是,如果请求失败并显示错误警告,则当我移回VC1时,将不会调用(VC2的)deinit函数。此外,它会导致错误"在屏幕显示VC1,屏幕然后转动时,不鼓励在分离的视图控制器上显示视图控制器" 除导航栏外的黑色和VC2的错误警报显示在VC1上(原因是当VC2将出现错误警报时,用户突然按导航栏上的后退按钮返回上一屏幕)。我的警报是一个全局变量。

以下是我处理请求并在VC2上显示警报的代码:

func sendRegisterRequest() {
    registerAPI.request(parameters: parameters) {
        [weak self] (response) in

        if let strongSelf = self {
            strongSelf.handleResponse(response)
        }
    }
}

func handleResponse(response: Response<AnyObject, NSError>) {
    let result = ResponseHandler.responseHandling(response)

    if result.messageCode != MessageCode.Success {
        // Show alert
        handleResponseError(LocalizedStrings.registerFailedTitle, message: result.messageInfo, requestType: .Register)
        return
    }
}

func handleResponseError(title: String, message: String?, requestType: RequestType?) {
    alert = UIAlertController(title: title, message: message, preferredStyle: .Alert)
    let action = UIAlertAction(title: LocalizedStrings.okButton, style: UIAlertActionStyle.Default) { (action) -> Void in
        self.handleAlertViewAction(requestType)
    }

    alert.addAction(action)

    dispatch_async(dispatch_get_main_queue(), {
        self.presentViewController(self.alert, animated: true, completion: nil)
    })
}

我在这里附上截图:

enter image description here

有没有人可以解决这个问题?任何帮助都可以得到赞赏,

Lucy Nguyen。

1 个答案:

答案 0 :(得分:0)

我在构建应用时遇到了同样的问题。为了解决这个问题,我尝试了很多更改,最后删除了错误消息。

我在第一个VC中创建了一个警告窗口,以便给用户一些通知。我在- (void)viewDidLoad中编写了警报控制代码。我认为你做的相同或在- (void)viewWillAppear

只需将您的提醒代码移至- (void)viewDidAppear即可。然后,错误就会消失。