2015-08-30 123 views
3

從OS X 10.11和iOS 9.0蘋果提供的這個框架聯繫人:CNContact爲Mac OS X 10.11

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上它工作正常)?

+0

你有沒有試過'-requestAccessForEntityType:completionHandler:'? – jtbandes

+2

是的,沒有任何反應...... – jonaszmclaren

回答

2

任何對CNContactStore實例的調用都會觸發請求。如果沒有嘗試

  1. 重啓(其實是幫我,我被授予訪問權限)
  2. 開啓沙箱
  3. Resetprivacy設置「命令tccutil恢復通訊錄」
  4. 調用它的主線程

CNContactStore調用實例:

[[CNContactStore alloc] init]; 

隱私

用戶可以授予或拒絕對每個應用程序 基礎上的聯繫人數據進行訪問。任何對CNContactStore的調用都會阻止應用程序,而 用戶被要求授予或拒絕訪問。請注意,用戶僅在第一次請求訪問時提示 ;任何後續的 CNContactStore調用都使用現有的權限。爲避免您的應用程序的UI主線程阻止此訪問,您可以使用異步方法[CNContactStore requestAccessForEntityType:CNEntityTypeContacts completionHandler:]或 將您的CNContactStore用法分派到後臺線程使用 或 。

+0

嗨,謝謝你的幫助!我剛剛在10.11新版本上嘗試了我的代碼,現在它可以工作!所以這可能是測試版本的一個問題。問候! – jonaszmclaren

1

你是從操場上試過這個嗎?這不起作用。

在你的項目試試這個方法:

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 
} 

反正你的問題使我的道路上找到一種方式來獲得聯繫人的圖像,所以感謝。

+0

嗨,沒問題! ;)我剛剛在10.11新版本上嘗試了我的代碼,現在它可以工作!所以這可能是測試版本的一個問題。無論如何,感謝您的幫助! – jonaszmclaren