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