2012-12-26 76 views
4

我有一个应用程序,我想将地址簿的详细信息导入到vcard格式。这是我已经完成的代码,但是我的电子邮件地址,照片,组织名称等问题没有保存在vcard中。如何使用地址簿联系人详细信息在iPhone中生成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格式保存所有联系人数据?

回答

1

拉尼,我建议以下伪代码:

  1. 获取接触照片作为NSData的(contactlist.objContact.Photo)
  2. 转换NSData的字节以BASE 64编码方案(NSData to base64base64EncodedString
  3. 添加编码的数据和属性,以电子名片:

[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 
    ...
+0

vCard版本3.0中'ENCODING'参数的正确值是'B'而不是'BASE64'。版本2.1中使用了BASE64。 3.0规范的链接是:http://tools.ietf.org/html/rfc2426。 – Michael

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

相关问题