我有一个应用程序,我想将地址簿详细信息导入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格式保存所有联系人数据?
答案 0 :(得分:1)
Rani,我建议使用以下伪代码:
[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属性值中转义分号,逗号,反斜杠,尤其是换行符。分号和逗号字符在某些属性(例如ADR
和ORG
)中具有特殊含义,因此为这些属性转义这些字符尤其重要。使用反斜杠对字符进行转义,如下所示:\;
,\,
,\\
,\n
。
(4)小心折叠。规范建议不要超过75个字符(不包括换行符)。如果一行超过此限制,则可以通过插入换行符并在行的开头添加至少一个制表符或空格字符来“折叠”(如@ rjobidon的答案中所示)。
(5)vCard的正确换行序列为\r\n
而非\n
。