假设我刚刚创建了一条ABPerson
记录并设法将其保存在用户的通讯录中。如何以编程方式打开处理通讯录的默认应用程序(很可能是联系人,但在某些情况下可能是 Outlook 或其他应用程序)并显示我刚刚添加的新通讯录记录?
提前致谢。
假设我刚刚创建了一条ABPerson
记录并设法将其保存在用户的通讯录中。如何以编程方式打开处理通讯录的默认应用程序(很可能是联系人,但在某些情况下可能是 Outlook 或其他应用程序)并显示我刚刚添加的新通讯录记录?
提前致谢。
addressbook
URL 方案能够显示人员记录或对其进行编辑:
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]];
更多信息在地址簿编程指南中。
这是我使用联系人应用程序的看法,在 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 号的意义,无论是用户还是系统特定的,但它是该子文件夹中的唯一项目,因此您应该能够以编程方式构建可行的路径。