IOS Objective-c - 让联系人不起作用 - 没有请求提示 - 访问被拒绝

标签 ios objective-c contacts addressbook

我正在使用 Objective-c 为 iPad 开发应用程序。我需要获取联系人的地址簿。但是我没有收到访问请求提示,访问仍然被拒绝。 bool 值“授予”永远不会为真,并且永远不会到达获取联系人数组的代码。因此联系人数组 contactsArray 保持为空。

以下是我使用的代码:

-(void) fetchAllContacts
{
    contactsArray = [[NSMutableArray alloc] init];

    CNContactStore *store = [[CNContactStore alloc] init];

    [store requestAccessForEntityType : CNEntityTypeContacts completionHandler : ^(BOOL granted, NSError * _Nullable error)
    {
        if (granted)
        {
             // Code to get the contacts array
             // contactsArray = ....
        }       
    }];
}

有什么帮助吗?

谢谢

最佳答案

iOS 只会出现一次模态访问请求提示。如果您第一次拒绝访问,则该应用将无法访问它,直到用户在 iOS 设置中更改该应用的权限。

一个选项是使用 UIApplicationOpenSettingsURLString 作为 URL 显示一个自定义提示,说访问被拒绝,并使用一个按钮直接导航到应用程序设置页面。

//objc
NSURL * url = [[NSURL alloc] initWithString:UIApplicationOpenSettingsURLString];
[UIApplication.sharedApplication openURL:url];

//swift
if let url = URL(string: UIApplicationOpenSettingsURLString) {
    UIApplication.shared.openURL(url)
}

关于IOS Objective-c - 让联系人不起作用 - 没有请求提示 - 访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53278239/

相关文章:

objective-c - Base64 和 utf8/National 字符编码

ios - 使用 sqlite swift iOS 多次访问 sqlite 数据库

iphone - 如何在IOS中动态调用类方法?

android - 如何在Android中获取联系人的所有详细信息

java - Android 在同一 Activity 中打开联系人列表

iphone - 我会丢失带有新证书的钥匙串(keychain)吗?

ios - pow 使用具有负指数的 Double 或 Decimal 返回不同的结果

ios - 如何以编程方式在 UITableViewController 的 NavigationBar 内设置 UISearchDisplayBar

objective-c - 使用 Core Graphics 绘图在 Retina 显示屏上看起来很笨重

android - BadParcelableException : ClassNotFoundException when getting name of picked contact