ios:我想创建包含我所有联系人的 .vcf/vcard。我该怎么做呢?
ios: I want to create .vcf/vcard which contains all my contacts. How do I do this?
我想创建一个 .vcf 文件与我创建的类似 Android 应用程序共享。我可以为单个联系人创建 .vcf 文件,但无法以相同的方式为多个联系人创建。
我已参考此 link 来帮助创建单个联系人的 vcf 文件。
我想创建一个包含我所有联系人的 vcf 文件。我该怎么做?
P.S- 我正在开发 swift 2.0.
谢谢
我终于找到方法了。
func createContact() -> [CNContact] {
let contactStore = CNContactStore()
var contacts = [CNContact]()
let fetchRequest = CNContactFetchRequest(keysToFetch:[CNContactVCardSerialization.descriptorForRequiredKeys()])
do {
try contactStore.enumerateContactsWithFetchRequest(fetchRequest) {
(contact123, stop) in
// Array containing all unified contacts from everywhere
contacts.append(contact123)}
}
catch {
print("unable to fetch contacts")
}
return contacts
}
以上代码将创建一个包含所有详细信息的所有联系人列表。您还可以 select 只从所有联系人中获取您想要的键(这可以作为您搜索的过滤器)。
然后简单地使用 CNContactVCardSerialization 创建一个 .vcard 文件
func shareContacts(联系人:[CNContact])抛出{
guard let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask).first else {
return
}
var filename = NSUUID().UUIDString
// Create a human friendly file name if sharing a single contact.
if let contact = contacts.first where contacts.count == 1 {
if let fullname = CNContactFormatter().stringFromContact(contact) {
filename = fullname.componentsSeparatedByString(" ").joinWithSeparator("")
}
}
let fileURL = directoryURL
.URLByAppendingPathComponent(filename)
.URLByAppendingPathExtension("vcf")
let data: NSData?
do {
data = try CNContactVCardSerialization.dataWithContacts(contacts)
print("filename: \(filename)")
print("contact: \(String(data: data!, encoding: NSUTF8StringEncoding))")
do {
try data!.writeToURL(fileURL, options: [.AtomicWrite])
}
catch {
print("eeror\(error)")
}
}
catch {
print("error\(error)")
}
let activityViewController = UIActivityViewController(
activityItems: [fileURL],
applicationActivities: nil
)
presentViewController(activityViewController, animated: true, completion: {})
}
以上代码将为您提供通过邮件、whatsapp 等方式分享的选项
希望这对某人有所帮助。
我想创建一个 .vcf 文件与我创建的类似 Android 应用程序共享。我可以为单个联系人创建 .vcf 文件,但无法以相同的方式为多个联系人创建。 我已参考此 link 来帮助创建单个联系人的 vcf 文件。
我想创建一个包含我所有联系人的 vcf 文件。我该怎么做?
P.S- 我正在开发 swift 2.0.
谢谢
我终于找到方法了。
func createContact() -> [CNContact] {
let contactStore = CNContactStore()
var contacts = [CNContact]()
let fetchRequest = CNContactFetchRequest(keysToFetch:[CNContactVCardSerialization.descriptorForRequiredKeys()])
do {
try contactStore.enumerateContactsWithFetchRequest(fetchRequest) {
(contact123, stop) in
// Array containing all unified contacts from everywhere
contacts.append(contact123)}
}
catch {
print("unable to fetch contacts")
}
return contacts
}
以上代码将创建一个包含所有详细信息的所有联系人列表。您还可以 select 只从所有联系人中获取您想要的键(这可以作为您搜索的过滤器)。
然后简单地使用 CNContactVCardSerialization 创建一个 .vcard 文件
func shareContacts(联系人:[CNContact])抛出{
guard let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.CachesDirectory, inDomains: .UserDomainMask).first else {
return
}
var filename = NSUUID().UUIDString
// Create a human friendly file name if sharing a single contact.
if let contact = contacts.first where contacts.count == 1 {
if let fullname = CNContactFormatter().stringFromContact(contact) {
filename = fullname.componentsSeparatedByString(" ").joinWithSeparator("")
}
}
let fileURL = directoryURL
.URLByAppendingPathComponent(filename)
.URLByAppendingPathExtension("vcf")
let data: NSData?
do {
data = try CNContactVCardSerialization.dataWithContacts(contacts)
print("filename: \(filename)")
print("contact: \(String(data: data!, encoding: NSUTF8StringEncoding))")
do {
try data!.writeToURL(fileURL, options: [.AtomicWrite])
}
catch {
print("eeror\(error)")
}
}
catch {
print("error\(error)")
}
let activityViewController = UIActivityViewController(
activityItems: [fileURL],
applicationActivities: nil
)
presentViewController(activityViewController, animated: true, completion: {})
}
以上代码将为您提供通过邮件、whatsapp 等方式分享的选项
希望这对某人有所帮助。