小编sza*_*ady的帖子

Swift:"尝试呈现其视图不在窗口层次结构中的UIAlertController!"

我正在尝试在单击按钮时显示UIAlertController(按钮单击运行某些代码,并根据所述结果 - 警报显示).最初的ViewController是默认的,我创建了第二个(ConsoleViewController).用户登录,并在成功登录后,转到下一个视图(ConsoleViewController),该视图显示数据(位于ConsoleViewController的viewDidLoad()部分).一旦用户点击"登记",该应用程序将捕获设备的GPS位置,当前日期/时间,并打开相机拍摄(自拍)照片.在相机中选择"使用照片"(尚未编码该功能)后,它会将所有3个参数发送到API处理程序.

第二个按钮打开日期选择器,用户选择日期和时间.点击"提交"按钮后,将使用所选日期(来自日期选择器)更新label.text,并且会弹出警报,说明基于API处理程序的returnString成功保存日期.

我遇到的问题是,我希望警报弹出窗口显示"成功"或"失败",具体取决于数据是否成功发送(基于API处理程序的returnString).我一直在收到错误Warning: Attempt to present <UIAlertController: 0x7fd03961b0a0> on <appName.ViewController: 0x7fd039538640> whose view is not in the window hierarchy!.我已经尝试将警报视图添加到主线程,我尝试改变segue的呈现方式(推送,模态等),以及我在StackOverFlow上找到的所有其他内容(以及搜索Google),没有解决方案似乎对我有用.我根据不正确的登录凭据(在ViewController上)创建了警报,并且弹出窗口正常工作.

下面是我的代码...不要介意我的随机print行...它可以帮助我跟踪我在哪里哈哈.

注意:我添加了相应的info.plist项目,以显示来自iOS的正确弹出窗口.这些也告诉我他们不在视图层次结构中

    func consoleAlertPopup(title: String, message: String) {

    let alertController = UIAlertController(title: title, message: message,     preferredStyle: UIAlertControllerStyle.alert)
        UIApplication.shared.keyWindow?.rootViewController?.present(alertController,     animated: true, completion: nil)
    alertController.addAction(UIAlertAction(title: "Try Again", style:     UIAlertActionStyle.default, handler:  nil))
}
Run Code Online (Sandbox Code Playgroud)

ConsoleViewController:

import UIKit
import CoreLocation
import MobileCoreServices

class ConsoleViewController: UIViewController, CLLocationManagerDelegate {

var alertView: UIAlertController?

// IB Outlets \\
@IBOutlet var DisplayUserName: UILabel!
@IBOutlet var …
Run Code Online (Sandbox Code Playgroud)

iphone hierarchy ios swift

3
推荐指数
2
解决办法
5377
查看次数

标签 统计

hierarchy ×1

ios ×1

iphone ×1

swift ×1