繁体   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