0

我的应用程序有一个带有“联系人”选项的菜单。当用户第一次选择联系人时,应用程序会询问用户使用设备联系人的权限。如果用户允许访问,则使用他/她的设备的联系人打开一个视图控制器,如果他没有,则什么也不会发生。之后,每次他们选择“联系人”选项时,它都会转到设备设置,在那里他们应该允许访问联系人或将其关闭。当他们允许访问并返回应用程序时,我希望它打开带有联系人的视图控制器,但事实并非如此。

我尝试将 NotificationCenter 与 didBecomeActiveNotification 选项一起使用,但似乎没有帮助。

func checkPermissionToDeviceContacts() {
    switch CNContactStore.authorizationStatus(for: .contacts) {
    case .notDetermined:
        self.requestContactsAccess()
    case .authorized:
        self.openContactsViewController()
    case .denied:
        self.headToSettingsOfPermissions()
    default: return
    }
}

func headToSettingsOfPermissions() {
    if let bundleId = Bundle.main.bundleIdentifier,
        let url = URL(string: "\(UIApplication.openSettingsURLString)&path=APPNAME/\(bundleId)")
    {
        UIApplication.shared.open(url, options: [:], completionHandler: nil)
    }
    self.setupNotifications()
}

func setupNotifications() {
    NotificationCenter.default.addObserver(self, selector: #selector(self.applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
}

@objc func applicationDidBecomeActive() {
    if CNContactStore.authorizationStatus(for: .contacts) == .authorized {
        self.openContactsViewController()
    }
    NotificationCenter.default.removeObserver(self, name: UIApplication.didBecomeActiveNotification, object: nil)
}

我也无法调试它,因为当打开设备设置并更改联系人的访问状态时,我的控制台会打印一条消息“来自调试器的消息:由于信号 9 而终止”。

问题是,当我不更改授权状态时,选择器功能起作用,但是当我更改授权状态时,它无论如何都不起作用。

PS这是我第一次使用NotificationCenter,可能没有正确使用。

4

1 回答 1

0

NotificationCenter始终将受影响的通知作为参数发送,您必须声明

@objc func applicationDidBecomeActive(_ notification : Notification) {

self并在selector参数中删除

NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
于 2019-09-08T12:24:59.533 回答