无法访问iOS 6中设备上的联系人源
这段代码在iOS 5.1上运行正常,在iOS 6的iPhone模拟器上也运行正常。它在运行iOS 6的iPhone4上无声地失败。最终的结果是,我无法向联系人应用程序添加联系人。以下代码段和工作日志都不在后面:无法访问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
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
}
}