Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:请求用户许可两件事,一个通知在另一个之前闪烁?_Ios_Swift_Permissions_Notifications - Fatal编程技术网

Ios Swift:请求用户许可两件事,一个通知在另一个之前闪烁?

Ios Swift:请求用户许可两件事,一个通知在另一个之前闪烁?,ios,swift,permissions,notifications,Ios,Swift,Permissions,Notifications,因此,当我运行下面的代码(并首次打开应用程序)时,位置权限请求会首先闪烁,然后立即被通知请求取代。如果我回答了通知一,那么就会出现位置一。我在问如何在第一个通知之前消除第二个通知的闪光 final class ModelController: UIViewController { let locationManager = CLLocationManager() var window: UIWindow? var mapVC: MapVC? override

因此,当我运行下面的代码(并首次打开应用程序)时,位置权限请求会首先闪烁,然后立即被通知请求取代。如果我回答了通知一,那么就会出现位置一。我在问如何在第一个通知之前消除第二个通知的闪光

final class ModelController: UIViewController {

    let locationManager = CLLocationManager()
    var window: UIWindow?
    var mapVC: MapVC?

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
        super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)

        locationManager.delegate = self
        locationManager.startMonitoringSignificantLocationChanges()
        locationManager.requestAlwaysAuthorization()

        UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.sound, .alert, .badge], categories: nil))
        UIApplication.shared.cancelAllLocalNotifications()
     }
 }
我的想法是,这是因为它在UI出现后调用,而不应该。modelcontroller是在我的rootViewController的viewDidLoad中创建的。我也不知道这样做是否正确

override func viewDidLoad() {
    super.viewDidLoad()
    mapView.delegate = self
    mapView.showsScale = true
    mapView.isPitchEnabled = false

    model = ModelController()
    model?.mapVC = self
}

您不应该在init方法中请求这些权限。你应该等到视图出现。您还应该等到第一个报告完成后再提交第二个报告。使用委托或完成处理程序。为什么它们应该在视图中出现而不是在视图中加载?我可以用一个完成处理程序来做这件事,但是用一个委托会更有帮助吗?你会怎么做?再次欢呼它确实解决了我的问题。很高兴它有帮助,当处理任何将呈现给用户的内容时,最好等到视图出现。更好的用户体验。此外,viewDidLoad在生命周期中过于早期,无法在中可靠地处理UI元素。委托或回调函数确实是首选函数,除非特定情况需要使用一个函数而不是另一个函数。您不应该在init方法中请求这些权限。你应该等到视图出现。您还应该等到第一个报告完成后再提交第二个报告。使用委托或完成处理程序。为什么它们应该在视图中出现而不是在视图中加载?我可以用一个完成处理程序来做这件事,但是用一个委托会更有帮助吗?你会怎么做?再次欢呼它确实解决了我的问题。很高兴它有帮助,当处理任何将呈现给用户的内容时,最好等到视图出现。更好的用户体验。此外,viewDidLoad在生命周期中过于早期,无法在中可靠地处理UI元素。委托或回调函数实际上是首选函数,除非特定情况需要使用一个函数而不是另一个函数。