以编程方式启动OS X的联系人应用程序显示联系人?

时间:2012-09-23 12:00:41

标签: macos cocoa contacts abaddressbook appkit

我们说我刚创建了ABPerson条记录,并设法将其保存在用户的地址簿中。如何以编程方式打开处理通讯簿的默认应用程序(最有可能是联系人但在某些情况下可能是Outlook或其他应用程序)并显示我刚刚添加的新通讯录记录?

提前致谢。

2 个答案:

答案 0 :(得分:0)

addressbook网址计划可以显示人员记录或对其进行编辑:

ABPerson * aPerson = <#assume this exists#>;

// Open the Contacts app, showing the person record.
NSString * urlString = [NSString stringWithFormat:@"addressbook://%@", [aPerson uniqueId]];
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:urlString]];

更多信息位于Address Book Programming Guide

答案 1 :(得分:0)

这是我使用“联系人”应用的要诀,在Swift中,它是CNContact的扩展名。我希望如今,大多数人都优先使用通讯录而不是通讯录。

(CNContact的identifier与ABPerson的uniqueId相同。)

func showInContacts() {
  let path = 
    "/Users/someusername/Library/Application Support/AddressBook/Sources/05A62A31-9C1F-423F-A9F4-011E56EAAF29/Metadata/0A1F4FC2-7E01-4A40-92DE-840F8C84DE58:ABPerson.abcdp
  var url = URL(fileURLWithPath: path)
  url.deleteLastPathComponent()
  url.appendPathComponent(self.identifier)// self is a CNContact
  url.appendPathExtension("abcdp")
  NSWorkspace.shared.open(url)
}

联系人位于单独的文件中,该文件埋在用户的图书馆/应用程序支持的一长串子文件夹的末尾。文件名只是联系人的标识符加上扩展名。您可以通过将其中之一拖到Xcode编辑器中,并用引号引起来,然后删除最后一个路径组件,从而节省键入内容。因为我的应用程序不适合分发,所以对我来说已经足够了;否则,您将不得不进行一些修改:用户名将位于第二个路径组件中。我不知道'Sources'后面的长ID号的重要性,无论是用户还是系统特定的,但是它是该子文件夹中的唯一项,因此您应该能够以编程方式构建可行的路径。

相关问题