簡體   English   中英

CNContact for Mac OS X 10.11

[英]CNContact for Mac OS X 10.11

從OS X 10.11和iOS 9.0 Apple提供此框架聯系人:

https://developer.apple.com/library/prerelease/mac/documentation/Contacts/Reference/Contacts_Framework/index.html#//apple_ref/doc/uid/TP40015328

我想從Mac訪問聯系人,但我無法做任何事情,因為該應用程序無法訪問聯系人:

switch CNContactStore.authorizationStatusForEntityType(.Contacts) {
    case .Authorized:
        print("Authorized")
        NSUserDefaults.standardUserDefaults().setBool(true, forKey: "contactsAllowed")
    case .Denied:
        print("Denied")
        NSUserDefaults.standardUserDefaults().setBool(false, forKey: "contactsAllowed")
    case .NotDetermined:
        print("Not Determined")
    case .Restricted:
        print("Restricted")
    }

該應用程序從不提示允許訪問聯系人,也不能在“系統偏好設置”中選擇它(它不會顯示)。

有沒有人知道如何在Mac上使用它們(在iOS上運行良好)?

對CNContactStore實例的任何調用都應該觸發請求。 如果不試試

  1. 重啟(實際上這對我有幫助;我獲准訪問)
  2. 打開沙盒
  3. Resetprivacy設置“sudo tccutil reset AddressBook”
  4. 在主線程上調用它

CNContactStore調用實例:

[[CNContactStore alloc] init];

隱私

用戶可以基於每個應用程序授予或拒絕訪問聯系人數據。 在要求用戶授予或拒絕訪問權限時,對CNContactStore的任何調用都將阻止該應用程序。 請注意,僅在第一次請求訪問時才提示用戶; 任何后續的CNContactStore調用都使用現有權限。 為了避免讓您的應用程序的UI主線程塊進行此訪問,您可以使用異步方法[CNContactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:]或將您的CNContactStore用法分配給后台線程。

你在游樂場試試嗎? 這不行。

在您的項目中嘗試此方法:

func getContactImage(name:String) -> NSImage?
{
    let store = CNContactStore()
    do
    {
        let contacts = try store.unifiedContactsMatchingPredicate(CNContact.predicateForContactsMatchingName(name), keysToFetch:[CNContactImageDataKey])
        if contacts.count > 0
        {
            if let image = contact[0].imageData
            {
                return NSImage.init(data: image)
            }
        }
    }
    catch
    {
    }

    return nil
}

無論如何,你的問題引導我找到一種方法來獲取聯系人圖像,所以謝謝你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM