Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法访问iOS 6中设备上的联系人源_Ios_Addressbook - Fatal编程技术网

无法访问iOS 6中设备上的联系人源

无法访问iOS 6中设备上的联系人源,ios,addressbook,Ios,Addressbook,这段代码在iOS 5.1上运行正常,在iOS 6的iPhone模拟器上也运行正常。它在运行iOS 6的iPhone4上无声地失败。最终的结果是,我无法向联系人应用程序添加联系人。以下代码段和工作日志都不在后面: ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(_addressBook); NSLog(@"2 - defaultSource = %@", defaultSource); AB:无法编译查询ABCCopyArra

这段代码在iOS 5.1上运行正常,在iOS 6的iPhone模拟器上也运行正常。它在运行iOS 6的iPhone4上无声地失败。最终的结果是,我无法向联系人应用程序添加联系人。以下代码段和工作日志都不在后面:

ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(_addressBook);
NSLog(@"2 - defaultSource = %@", defaultSource);
AB:无法编译查询ABCCopyArrayFallInstancesOfClassInsourceMatchingProperties的语句: 选择ROWID、Name、ExternalIdentifier、Type、ConstraintsPath、ExternalModificationTag、ExternalSyncTag、AccountID、Enabled、SyncData、MeIdentifier、Absore中的功能,其中Enabled=

2012-09-24 11:00:36.731 QR vCard[193:907]2-defaultSource=CPRecord:0x1f59fd50 Absore

当我尝试将一个人添加到通讯簿时,我得到的结果似乎是因为来源无效,尽管从上面看起来可能没有问题:

2012-09-24 11:18:32.231 QR vCard[220:907]ABAddressBookAddRecord错误=操作无法完成。ABAddressBookErrorDomain错误1

我想我可以得到所有的来源,然后选择一个,但是下面的结果一个也没有返回:

CFArrayRef allSources = ABAddressBookCopyArrayOfAllSources (_addressBook);
NSLog(@"2 - allSources = %@", allSources);
AB:无法编译查询ABCCopyArrayFallInstancesOfClassInsourceMatchingProperties的语句: 选择ROWID、Name、ExternalIdentifier、Type、ConstraintsPath、ExternalModificationTag、ExternalSyncTag、AccountID、Enabled、SyncData、MeIdentifier、Absore中的功能,其中Enabled=


2012-09-24 10:58:09.908 QR vCard[177:907]2-allSources=

此日志消息表示您的应用程序可能尚未被允许访问联系人。iOS 6允许用户拒绝应用程序访问通讯簿的权限

一旦用户允许你的应用程序访问联系人,该消息就会消失——通过弹出对话框或转到设置->隐私->联系人


有关此主题的更多信息,请参阅WWDC 2012会话710 iOS和OS X中的隐私支持。

我也有同样的问题,无法获取允许访问联系人警报弹出窗口

Kyle在这里发布了答案:


如果您是从谷歌来到这里的,并且正在使用iOS新的CNContactStore框架,并且出现这些错误,请继续阅读:

我认为让我的CNContactStore成为用类实例初始化的成员变量会更干净:

class foo {
    var contactStore = CNContactStore()

    func findByIdentifier(identifier: String) -> CNContact {
        let contact = try self.contactStore.unifiedContactWithIdentifier(identifier...
        return contact
    }
}
在我打了50次电话后,它开始出错了

AB:无法编译查询ABCCopyArrayFallInstancesOfClassInsourceMatchingProperties的语句

我试着限制我的通话速率,但没用。事实证明,为每个呼叫实例化一个新的CNContactStore对性能没有任何影响,完全解决了我的问题:

class foo {

    func findByIdentifier(identifier: String) -> CNContact {
        let contactStore = CNContactStore()
        let contact = try contactStore.unifiedContactWithIdentifier(identifier...
        return contact
    }
}

希望这有帮助

我发现在iOS 6中,你需要用户的许可才能将一个人添加到通讯录中。苹果又在保护我们了。增加了代码的复杂性。。。
class foo {

    func findByIdentifier(identifier: String) -> CNContact {
        let contactStore = CNContactStore()
        let contact = try contactStore.unifiedContactWithIdentifier(identifier...
        return contact
    }
}