如何使用地址簿联系方式在iPhone中生成vcard?

时间:2012-12-26 10:36:44

标签: iphone objective-c ios vcard

我有一个应用程序,我想将地址簿详细信息导入vcard格式。这是我已经完成的代码,但问题是我的电子邮件地址,照片,组织名称等没有保存在vcard中。

    -(NSString*)vcardrepresentation
{


        NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

        [mutableArray addObject:@"BEGIN:VCARD"];
        [mutableArray addObject:@"VERSION:3.0"];

        [mutableArray addObject:[NSString stringWithFormat:@"FN:%@ %@", self.contactlist.objContact.firstname,self.contactlist.objContact.lastname]];

        [mutableArray addObject:[NSString stringWithFormat:@"ORG:%@",self.contactlist.objContact.companyname]];
        [mutableArray addObject:[NSString stringWithFormat:@"ADR:%@",self.contactlist.objContact.City]];

        if ([phoneArray count]!=0)
            [mutableArray addObject:[NSString stringWithFormat:@"TEL:%@", phoneemail.phoneNumber]];

        if ([emailArray count]!=0)
        {
            [mutableArray addObject:[NSString stringWithFormat:@"EMAIL:%@",phoneemail.phoneNumber]];
        }
    if ([contactlist.objContact.Photo length]==0)
    {
        [mutableArray addObject:[NSString stringWithFormat:@"PHOTO:%@",[UIImage imageNamed:@"man.png"]]];
    }
    else
    {

        [mutableArray addObject:[NSString stringWithFormat:@"PHOTO:%@",[UIImage imageWithData:contactlist.objContact.Photo]]];
    }


        [mutableArray addObject:@"END:VCARD"];

        NSString *string = [mutableArray componentsJoinedByString:@"\n"];


        return string;

}

如何以vcard格式保存所有联系人数据?

2 个答案:

答案 0 :(得分:1)

Rani,我建议使用以下伪代码:

  1. 获取NSData联系人照片(contactlist.objContact.Photo)
  2. 将NSData字节转换为BASE 64编码方案(NSData to base64base64EncodedString
  3. 将编码数据和属性添加到vCard:
  4. [mutableArray addObject:[NSString stringWithFormat:@"PHOTO;ENCODING=BASE64;TYPE=JPEG:%@", data]];

    您的信息vCard photographs是使用Base 64方案编码的图像。有16种支持的文件格式,包括GIF和JPEG。这是一个例子:

    PHOTO;ENCODING=BASE64;TYPE=GIF: 
        R0lGODdhfgA4AOYAAAAAAK+vr62trVIxa6WlpZ+fnzEpCEpzlAha/0Kc74+PjyGM 
        SuecKRhrtX9/fzExORBSjCEYCGtra2NjYyF7nDGE50JrhAg51qWtOTl7vee1MWu1 
        50o5e3PO/3sxcwAx/4R7GBgQOcDAwFoAQt61hJyMGHuUSpRKIf8A/wAY54yMjHtz 
        ...

答案 1 :(得分:1)

(1)看起来您要将EMAIL属性的值设置为电话号码。

(2)ADR属性的格式不正确。正确的格式是将地址分成单独的组件,用分号分隔。格式为:

ADR:post-office-box;extended-address;street-address;city;state;zip-code;country

如果某个地址缺少某个组件(例如,它没有邮局信箱),则应使用空字符串。因此,ADR值应始终包含6个分号。

(3)应在所有vCard属性值中转义分号,逗号,反斜杠,尤其是换行符。分号和逗号字符在某些属性(例如ADRORG)中具有特殊含义,因此为这些属性转义这些字符尤其重要。使用反斜杠对字符进行转义,如下所示:\;\,\\\n

(4)小心折叠。规范建议不要超过75个字符(不包括换行符)。如果一行超过此限制,则可以通过插入换行符并在行的开头添加至少一个制表符或空格字符来“折叠”(如@ rjobidon的答案中所示)。

(5)vCard的正确换行序列为\r\n而非\n