由於我切換到Mac OS Sierra和XCode 8,使用unifiedContactsMatchingPredicate的代碼:keysToFetch:error:或unifiedContactWithIdentifier:keysToFetch:error:不再正常運行。CNContact unifiedContact與Mac OS Sierra破壞
返回錯誤:錯誤域:CNErrorDomain代碼:200 說明該記錄不存在或記錄更新失敗。
所有的代碼在Mac OS 10.11和XCode 7都可以正常工作,對地址簿的讀取權限被授予,並且我正在尋找的CNContact確實存在。
我與iOS 10有相同的行爲,我通過在plist文件中添加了一個NSContactsUsageDescription鍵(在iOS 10之前是可選的,但不再),解決了這個問題。我在我的Mac OS plist文件中做了同樣的事情,但沒有運氣。
任何線索是怎麼回事,在哪裏尋找?
編輯:一些代碼:
我寫了2個新項目,一個在Objective-C,一個在斯威夫特。他們都給出了相同的結果。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
CNContactStore *contactStore = [[CNContactStore alloc] init] ;
NSPredicate *predicate = [CNContact predicateForContactsMatchingName:@"TEST_CONTACT"] ;
NSError *error = nil ;
NSArray *keys = @[
CNContactGivenNameKey,
CNContactFamilyNameKey
] ;
NSArray *contacts = [contactStore unifiedContactsMatchingPredicate:predicate
keysToFetch:keys
error:&error] ;
NSLog(@"%d contacts found : %@",[contacts count],contacts) ;
}
和
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
let contactStore = CNContactStore()
let predicate = CNContact.predicateForContacts(matchingName: "TEST_CONTACT")
let keys = [CNContactGivenNameKey,CNContactFamilyNameKey]
do
{
let contacts = try contactStore.unifiedContacts(matching: predicate,
keysToFetch: keys as [CNKeyDescriptor])
print(contacts)
}
catch
{
print("caught an error")
}
}
結果控制檯中顯示:
2016-09-27 17:19:48.797029 TestCNContact.swift[13675:3502046] [core] __42-[ACAccountStore accountsWithAccountType:]_block_invoke_2 (208) "Error returned from daemon: <private>"
2016年9月27日17:19:48.798105 TestCNContact.swift [13675:3502046 ] [芯] __42- [ACAccountStore accountsWithAccountType:] _ block_invoke_2(208) 「錯誤從守護進程返回:」 ] 2016年9月27日17:19:49.631876 TestCNContact.swift [13675:3502047] [錯誤]警告:動態存取未能找到 'UNIQUEID' @property實施實體ABCDInfo同時解決選擇 'UNIQUEID' 階級'ABCDInfo'。您是否記得在@implementation中聲明@dynamic或@synthesized? 2016-09-27 17:19:52.637627 TestCNContact.swift [13675:3502047] [error]警告:動態訪問器在解析類ABCDAddressBookSource的選擇器'serialNumber'時未能找到'serialNumber'實體ABCDAddressBookSource的@property實現。 。您是否記得在@implementation中聲明@dynamic或@synthesized? 2016-09-27 17:19:52.739108 TestCNContact.swift [13675:3502068] [error]警告:在解決類ABCDAddressBookSource上的選擇器'uniqueId'時,動態訪問器未能找到'uniqueId'實體ABCDAddressBookSource的@property實現。 。您是否記得在@implementation中聲明@dynamic或@synthesized?
我知道它不會幫助,但我看到macOS上的那些相同的控制檯錯誤消息...沒有任何Xcode開發工作,我正在做。他們就在那裏。 – deitch
@deitch謝謝,我感到孤獨......我沒有找到任何解決方法或解決辦法,我的應用程序被嚴重破壞。我填了一個雷達。 –
我在此發送推文。至少有三個主要版本的OS X/macOS,這些少數特效產品 - soagent,callservicesd,nsurlsession - 將Mac帶到了另一端。真的很可憐 – deitch