1

我正在处理需要加载用户联系人的项目。为此,我需要联系人信息。因此我正在使用联系人框架。它易于使用,而且速度也非常快。我是 iOS 新手,所以我只使用了获取联系人信息的代码片段。

我做了什么:但是我有问题,那就是当用户安装应用程序并转到相应的 ViewController 时,ViewController 会显示 Dialog 以获得权​​限。那里的用户可以拒绝和允许权限。当用户允许权限但不能以其他方式工作时,我的应用程序运行良好。所以我使用了一个函数来检查用户是否给了我的应用权限。

所以我读到当用户没有授予权限时,我们不能做任何事情。除非我们可以将他带到允许权限并取回应用程序的设置。这是我用来转到设置应用程序的代码。

    if let appSettings = URL(string: UIApplicationOpenSettingsURLString + Bundle.main.bundleIdentifier!) {
    if UIApplication.shared.canOpenURL(appSettings) {
      UIApplication.shared.open(appSettings)
    }
  }

问题:

现在我的问题很关键,那就是我知道我可以将用户带到设置视图,现在如果用户仍然不允许权限并返回我们的应用程序怎么办,在这种情况下如何检查用户是否已授予我们权限或不是??

我是 iOS 新手,而且速度很快,所以请通过示例帮助我。我搜索了很多,但没有找到任何东西。在 Android 中有回调,也可以使用 onResume,但在 iOS 中,我使用 ViewWillAppear 认为等同于 onResume 但这不起作用。

4

1 回答 1

0

如果您有一个刷新按钮,您可以执行以下操作:

@IBAction func refreshButtonPressed(_ sender: UIButton) {
            ContactsService.sharedInstance.CNContactStore.requestAccess(to: .contacts, completion: { granted, error in
                if !granted {
                    //TODO: - Do something (e.g)
                    self.[method to display an access denied alert to the user]
                    return
                } else { 
                    [insert your code here]
            }
}

此外,正如另一位用户在回复您原来的问题时所说:为什么当应用程序从后台返回时不会调用 viewWillAppear?您可能会感兴趣。您可能希望ContactsService.sharedInstance.CNContactStore.requestAccess( .... { }在函数内调用块的内容并将其连接到侦听器UIApplication.willEnterForegroundNotification

https://developer.apple.com/documentation/contacts https://developer.apple.com/documentation/contacts/cncontactstore https://developer.apple.com/documentation/contacts/cncontactstore/1402873-requestaccess

于 2018-11-26T16:14:23.723 回答