【问题标题】:How to create vCard from address book using ios sdk?如何使用 ios sdk 从通讯录创建 vCard?
【发布时间】:2012-11-06 10:45:06
【问题描述】:

我不知道如何从通讯录创建 vCard。我可以通过搜索为 vCard 数据生成 NSString,但我不知道如何将 NSString 转换为 .vcf。这是我的 vCard 数据的 NSString 代码。

NSString *vcard = @"BEGIN:VCARD\nVERSION:3.0\n";

    // Name
    vcard = [vcard stringByAppendingFormat:@"N:%@;%@;%@;%@;%@\n",
             (contact.lastname ? contact.lastname : @""),
             (contact.firstname ? contact.firstname : @""),
             (contact.middlename ? contact.middlename : @""),
             (contact.prefix ? contact.prefix : @""),
             (contact.suffix ? contact.suffix : @"")
             ];

    vcard = [vcard stringByAppendingFormat:@"FN:%@\n",contact.compositeName];
    if(  contact.nickname ) vcard = [vcard stringByAppendingFormat:@"NICKNAME:%@\n",contact.nickname];
    if(  contact.firstnamephonetic ) vcard = [vcard stringByAppendingFormat:@"X-PHONETIC-FIRST-NAME:%@\n",contact.firstnamephonetic];
    if(  contact.lastnamephonetic ) vcard = [vcard stringByAppendingFormat:@"X-PHONETIC-LAST-NAME:%@\n",contact.lastnamephonetic];


    // Work
    if( contact.organization || contact.department ) vcard = [vcard stringByAppendingFormat:@"ORG:%@;%@\n",(contact.organization?contact.organization:@""),(contact.department?contact.department:@"")];
    if( contact.jobtitle ) vcard = [vcard stringByAppendingFormat:@"TITLE:%@\n",contact.jobtitle];


    // Mail
    vcard = [vcard stringByAppendingString:[VCard toVcardField:@"email" items:contact.emailArray labels:contact.emailLabels]];

    // Tel
    vcard = [vcard stringByAppendingString:[VCard toVcardField:@"phone" items:contact.phoneArray labels:contact.phoneLabels]];

    // Adress
    vcard = [vcard stringByAppendingString:[VCard toVcardField:@"address" items:contact.addressArray labels:contact.addressLabels]];

    // url
    vcard = [vcard stringByAppendingString:[VCard toVcardField:@"url" items:contact.urlArray labels:contact.urlLabels]];

    // IM
    vcard = [vcard stringByAppendingString:[VCard toVcardField:@"im" items:contact.smsArray labels:contact.smsLabels]];

    // birthday
    NSDate *birthday = contact.birthday;
    if (birthday)
    {
        NSString *bday = [NSString stringWithFormat:@"%@",birthday];
        NSArray *bdayArr = [bday componentsSeparatedByString:@" "];
        bday = [bdayArr objectAtIndex:0];

        vcard = [vcard stringByAppendingFormat:@"BDAY;value=date:%@\n",bday];
    }

    // Photo
    NSData *imageData = contact.thumbData;//contact.imageData;
    if (imageData)
    {
        //vcard = [vcard stringByAppendingFormat:@"PHOTO;BASE64:%@\n",[imageData base64Encoding]];
    }

    // end
    vcard = [vcard stringByAppendingString:@"END:VCARD"];

我得到 NSSTring 作为输出:

vCard : BEGIN:VCARD
VERSION:3.0
N:def;Abc;;;
FN:Abc def
ORG:slk;
EMAIL;type=INTERNET;type=HOME:fdf@gmail.com
TEL;type=CELL:(258) 963-4889
TEL;type=IPHONE:(435) 768-6343
item1.ADR;type=HOME:;;aashram road;Ahmedabad;;;India
item1.X-ABADR:in
END:VCARD 

谁能帮我将此 NSString 转换为 .vcf 文件以获取 vCard?

【问题讨论】:

  • 您好,感谢您提出问题,因为我正在做同样的事情,但您能帮我如何将这个 .vcf 导出到特定的电子邮件以及如何将这个 .vcf 文件附加到电子邮件提前谢谢
  • 你能告诉我[VCard toVcardField:@"email" items:contact.emailArray labels:contact.emailLabels]是什么,这是任何默认方法吗?

标签: iphone ios addressbook


【解决方案1】:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory

NSError *error;
BOOL succeed = [yourNSString writeToFile:[documentsDirectory stringByAppendingPathComponent:@"contact.vcf"]
                          atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!succeed){
    // Handle error here
    NSLog(@"Error");
}

此代码将 vcard 保存在应用的 Documents 目录中。

yourNSString 是您在生成 vcard 时使用的变量

【讨论】:

  • 你能建议我接受我上面的评论吗?或请提供完整的详细信息以创建 vcard
  • 我使用这种方法,但我得到 MIME/content-type = "text/directory" 我需要 "text/x-vcard"。请帮忙
猜你喜欢
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多