没有请求从用户的地址簿

时间:2017-09-26 09:37:14

标签: ios swift contact

我必须从他的电话簿中访问用户联系人并在skstableview中显示它。 为了获得联系并在tableview上显示它我使用下面的代码,但它既不是要求访问联系人权限也不是要获取联系人并在控制台上打印此声明:

  

“拒绝访问”UserInfo = {NSLocalizedDescription =拒绝访问,NSLocalizedFailureReason =此应用程序未被授予访问联系人的权限。}

我已经在plist文件中输入了访问联系人但没有任何内容对我有效。

以下是我在swift中的Xcode 8.3.3中使用的代码片段。

 func getContacts() {
    let store = CNContactStore()

    if CNContactStore.authorizationStatus(for: .contacts) == .notDetermined {

        store.requestAccess(for: .contacts){succeeded, err in
            guard err == nil && succeeded else{
                return
            }
            self.contactList()
        }
    } else if CNContactStore.authorizationStatus(for: .contacts) == .authorized {
        self.contactList()
        NSLog(" move to contact list ")

    }
}

func contactList() {
    let req = CNContactFetchRequest(keysToFetch: [
        CNContactFamilyNameKey as CNKeyDescriptor,
        CNContactGivenNameKey as CNKeyDescriptor,
        CNContactPhoneNumbersKey as CNKeyDescriptor
        ])

    arr_contacts.removeAllObjects()

    try! CNContactStore().enumerateContacts(with: req) {
        contact, stop in
        print("contacts \(contact)") // in real life, probably populate an array
        self.arr_contacts.add(contact)
    }

    tbl_List.reloadData()
    print("added all contacts")

}

任何人都可以建议我做错了什么。

谢谢

4 个答案:

答案 0 :(得分:1)

请将此添加到info.plist

<key>NSContactsUsageDescription</key>
<string>App users your contacts</string>

答案 1 :(得分:1)

pd.get_dummies()

答案 2 :(得分:0)

此问题在模拟器上,它在设备中运行良好,并显示我的访问权限弹出窗口。

谢谢你们的大力帮助。

答案 3 :(得分:0)

如果有人到达这里时出现以下错误(就像我一样):This application has not been granted permission to access some of the requested keys.

这可能是因为您在获取联系人时请求了 CNContactNoteKey。如果是这种情况,则您需要获得特殊权限才能访问联系人备注:https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_developer_contacts_notes?language=objc

iOS15 测试版当前存在一个错误,除非您在获取联系人时请求 Notes,否则将引发异常,但如果您请求 Notes,则获取将失败。因此,除非您获得特殊许可,否则实际上不可能在 iOS15 测试版中获取联系人。我已将此报告给 Apple (FB9263783)。