我在我的 iPhone 应用程序中使用 AddressBook.framework,我想复制一些与 Contacts.app 中的共享功能类似的东西。这基本上将特定的联系人电子名片附加到电子邮件中。据我所知,文档中没有提到生成 vCard。
这是自己生成的情况吗?或者有什么可以帮助我的吗?
我在我的 iPhone 应用程序中使用 AddressBook.framework,我想复制一些与 Contacts.app 中的共享功能类似的东西。这基本上将特定的联系人电子名片附加到电子邮件中。据我所知,文档中没有提到生成 vCard。
这是自己生成的情况吗?或者有什么可以帮助我的吗?
完全同意 Dave DeLong 的回答。只想补充一点,因为我只是想创建一个 vCard 文件 (.vcf) 并将其附加到应用内电子邮件操作中,我所做的是创建一个字符串,然后是一个临时文件,其中包含我拥有的所有 vCard 字段的数据.
就我而言,我在我的NSManagedObject
子类中创建了一个方法来返回一个-vCardRepresentation
字符串。
一个 Objective-c 类别或简单的框架将是一个很大的帮助 - 我可能会在适当的时候这样做。
维基百科页面和vCard (3.0)的正式规范确实很有帮助。
更新 3:如果您使用的是 iOS 5 或更高版本,现在有一个函数ABPerson
可以返回给定人员记录的 vCard 表示:
CFDataRef ABPersonCreateVCardRepresentationWithPeople(CFArrayRef people);
更新 2:我急于完成一个应用程序,但是因为我确实想创建 vCard 数据并将其作为附件添加到多个地方的应用程序内邮件消息中,所以我现在制作了一个单独的类控制器来制作/隐藏vCard 语法的详细信息。然后我只有一个方法,它返回 vCard 字符串的 NSData 版本,以作为附件直接添加到邮件中。这是一个更干净的解决方案,您不需要创建任何文件,即使它们只是临时的。另外,您实际上并不需要数据的 NSString 表示,除非您确实想创建一个文件并多次使用它来保存重新制作数据?
我的控制器类有许多-setXXXX
方法可以将值添加到字典中,其中键是带有 vCard 字段名称的字符串,例如 FN、TEL 和 ADR。然后当我调用它时-vCardRepresentation
,它现在返回一个 NSData 对象(通过扫描字典构建),可以直接在 MFMailComposeViewController 的-addAttachmentData:mimeType:fileName:方法中使用。
如果我可以整理我的代码,使其足够通用,我会稍后发布。
更新:这是我的代码,它可能会帮助某人入门:
- (NSString *)vCardRepresentation
{
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
[mutableArray addObject:@"BEGIN:VCARD"];
[mutableArray addObject:@"VERSION:3.0"];
[mutableArray addObject:[NSString stringWithFormat:@"FN:%@", self.name]];
[mutableArray addObject:[NSString stringWithFormat:@"ADR:;;%@",
[self addressWithSeparator:@";"]]];
if (self.phone != nil)
[mutableArray addObject:[NSString stringWithFormat:@"TEL:%@", self.phone]];
[mutableArray addObject:[NSString stringWithFormat:@"GEO:%g;%g",
self.latitudeValue, self.longitudeValue]];
[mutableArray addObject:[NSString stringWithFormat:@"URL:http://%@",
self.website]];
[mutableArray addObject:@"END:VCARD"];
NSString *string = [mutableArray componentsJoinedByString:@"\n"];
[mutableArray release];
return string;
}
显然,我正在引用我的类中的属性,以及一个调用-addressWithSeparator
来构建地址数据的方法,该方法必须包含 ; 即使是可选地址字段的分隔符。
在这里您可以下载生成 vCard 的代码。