当应用程序准备好呈现警报时,从AppDelegate呈现警报

时间:2018-07-17 15:10:31

标签: ios swift xcode uialertcontroller

我正在使用Xcode 9.4.1 (9F2000)Swift

我在didFinishLaunchingWithOptions中的AppDelegate中有这个名称:

DispatchQueue.main.asyncAfter(deadline: .now() + 20.0, execute: {
    self.selectUser()
})

selectUser()将调用一个函数,该函数会发出警报以让用户选择其姓名。

在不延迟的情况下调用selectUser()时,ViewController(我想)尚未准备好加载,并且收到如下消息:

  

2018-07-17 16:51:42.576783 + 0200 MyApp [2492:824301]警告:   尝试呈现    他的观点不在   窗口层次结构!

我认为有一种更好的方法,例如:如果已准备好加载应用程序以显示UIAlertController,请调用selectUser()

您知道如何执行此操作吗?

2 个答案:

答案 0 :(得分:1)

您需要<?xml version="1.0" encoding="UTF-8"?> <object href="https://services470.zuora.com/apps/api/describe/Invoice"> <name>Invoice</name> <label>Invoice</label> <fields> <field> <name>AccountId</name> <label>Account ID</label> <selectable>true</selectable> <createable>true</createable> <updateable>false</updateable> <filterable>true</filterable> <custom>false</custom> <maxlength></maxlength> <required>true</required> <type>text</type> <contexts> <context>soap</context> </contexts> </field> <field> <name>AdjustmentAmount</name> <label>Adjustment Amount</label> <selectable>true</selectable> <createable>false</createable> <updateable>false</updateable> <filterable>true</filterable> <custom>false</custom> <maxlength></maxlength> <required>true</required> <type>decimal</type> <contexts> <context>soap</context> <context>export</context> </contexts> </field> <!-- All fields for Invoice...ETC --> </fields> </object> ,但是要确保它也在从后台返回时被调用,因此,如果您不希望再次调用它,请将代码包装在一次var中

applicationDidBecomeActive

答案 1 :(得分:1)

由于您需要具有root viewController(storyboard或程序化),所以最简单的方法是将警报显示在viewController内部,因为如果完成didFinishLaunchingWithOptions,则将显示“ root” -viewController.view