【发布时间】:2016-03-25 07:54:04
【问题描述】:
我有两个视图控制器: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)
})
}
我在这里附上截图:
有人能解决这个问题吗?任何帮助都将不胜感激,
露西·阮。
【问题讨论】:
-
请添加一些代码以便更好地理解...
-
为什么要调用 deinit 函数
-
我认为您在 VC2 上显示警报,然后关闭 VC2。您应该在点击 OK 按钮时关闭 VC2。或者您应该关闭 VC2,然后显示警报
-
显示的警报取决于请求结果。而当 VC2 将要显示警报时,用户突然按下导航栏上的后退按钮返回到上一个屏幕。这会导致此错误。
-
我调用 deinit 函数来了解 VC2 是否得到 deinit,如果是则释放警报。让我添加一些代码。