2

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

提前致谢。

4

2 回答 2

1

addressbookURL 方案能够显示人员记录或对其进行编辑:

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]];

更多信息在地址簿编程指南中。

于 2013-12-17T02:02:58.973 回答
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 编辑器,用引号括起来,并可能删除最后一个路径组件来保存一些输入。因为我的应用程序不适合分发,这对我来说已经足够了;否则你将不得不做一些修改:用户名将在第二个路径组件中。我不知道“源”后面的长 ID 号的意义,无论是用户还是系统特定的,但它是该子文件夹中的唯一项目,因此您应该能够以编程方式构建可行的路径。

于 2019-04-10T13:14:59.983 回答