我正在研究如何使用Contacts框架,但是用于创建联系人的一些相当简单的代码却失败了,并产生了意外的结果。这是我的代码:
let Store = CNContactStore()
Store.requestAccess(for: .contacts, completionHandler:{ success, error in
if success {
let Contact = CNMutableContact()
Contact.givenName = "Dave"
Contact.familyName = "Nottage"
let SaveRequest = CNSaveRequest()
SaveRequest.add(Contact, toContainerWithIdentifier: nil)
do {
try Store.execute(SaveRequest)
print("Success")
}
catch let error as NSError {
print(error.localizedDescription)
}
} else {
print("No access")
}
})
..这是结果:
2019-02-22 10:30:56.050344+1030 ContactsTest[30329:25254955] [default] Unable to load Info.plist exceptions (eGPUOverrides)
2019-02-22 10:30:57.973724+1030 ContactsTest[30329:25254955] Could not get real path for Address Book lock folder: open() for F_GETPATH failed.
2019-02-22 10:30:57.973954+1030 ContactsTest[30329:25254955] Unable to open file lock: <ABProcessSharedLock: 0x600001752ac0: name=(null), lockFilePath=(null), localLock=<NSRecursiveLock: 0x600002914a80>{recursion count = 0, name = nil}, fileDescriptor=-1> Error Domain=NSPOSIXErrorDomain Code=14 "Bad address" UserInfo={ABFileDescriptor=-1}
The operation couldn’t be completed. (Foundation._GenericObjCError error 0.)
关于可能是什么原因的任何想法?
编辑:还请注意,该文件正在针对macOS 10.14 SDK进行编译,并且正在macOS 10.14.3上运行
答案 0 :(得分:0)
确保在 Info.plist 中添加了键 NSContactsUsageDescription 。
请参阅link。
重要
在iOS 10.0或之后链接的iOS应用必须包含在其Info.plist中 归档需要使用的数据类型的使用描述密钥 访问,否则将崩溃。要专门访问联系人数据,必须 包括NSContactsUsageDescription。
答案 1 :(得分:0)
答案是选中“功能”中“应用程序沙箱”部分中“应用程序数据的联系人”复选框,然后打开应用程序沙箱的开关。