gpt4 book ai didi

iphone - 在 iPhone 中创建 vCard

转载 作者:行者123 更新时间:2023-12-03 21:18:39 24 4
gpt4 key购买 nike

我正在尝试在 iPhone 中创建 vCard 表示形式。我为 vCard 创建了一个字符串表示形式。我不知道如何将其转换为 NSData 表单以便将其作为附件邮寄。这是我到目前为止所拥有的:

        NSString *vCardString = [vCard getVCFString]; // returns string representation for vCard
NSData *vCardData = [vCardString dataUsingEncoding:NSUTF8StringEncoding];
[mailController addAttachmentData:vCardData mimeType:@"text/x-vcard" fileName:@"LocationInfo"];

当我在发送测试电子邮件时单击附件时,它会转到创建新联系人/添加为现有联系人。由于 iPhone 将其识别为联系人,这是正确的吗?我想我有兴趣从中获取位置信息,但这似乎没有显示在我的附件中。创建 VCF 表示的代码是:

vcfString = [[NSMutableString allocWithZone:[self zone]] initWithCapacity:kDefaultStringSize];
[vcfString appendString:@"BEGIN:VCARD\n"];
[vcfString appendString:@"VERSION:3.0\n"];
if (s) {
NSMutableString *aString = [[NSMutableString alloc] initWithFormat:@"%@;", s];
[vcfString appendString:aString];
[aString replaceOccurrencesOfString:@";" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [aString length])];
street = [[NSString allocWithZone:[self zone]] initWithString:aString];
[aString release];
}
if (c) {
NSMutableString *aString = [[NSMutableString alloc] initWithFormat:@"%@;", c];
[vcfString appendString:aString];
[aString replaceOccurrencesOfString:@";" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [aString length])];
city = [[NSString allocWithZone:[self zone]] initWithString:aString];
[aString release];
}
if (st) {
NSMutableString *aString = [[NSMutableString alloc] initWithFormat:@"%@;", st];
[vcfString appendString:aString];
[aString replaceOccurrencesOfString:@";" withString:@"" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [aString length])];
state = [[NSString allocWithZone:[self zone]] initWithString:aString];
[aString release];
}
// TODO: look up semicolon for VCard representation
if (z) {
NSString *aString = [[NSString alloc] initWithFormat:@"%@\n", z];
[vcfString appendString:aString];
zip = [[NSString allocWithZone:[self zone]] initWithString:aString];
[aString release];
}
[vcfString appendString:@"END:VCARD"];

最佳答案

完全同意戴夫·德隆的回答。只是想补充一点,因为我只是想创建一个 vCard 文件 (.vcf) 并将其附加到应用内电子邮件操作,所以我所做的是创建一个字符串,然后创建一个临时文件,其中包含我拥有数据的所有 vCard 字段.

就我而言,我在 NSManagedObject 子类中创建了一个方法来返回 -vCardRepresentation 字符串。

一个 Objective-c 类别或简单的框架将会有很大的帮助 - 我可能会在适当的时候这样做。

Wikipedia页面和 vCard (3.0) 的正式规范确实很有帮助。

更新 2:我急于完成一个应用程序,但因为我确实想创建 vCard 数据并将其作为附件添加到多个地方的应用程序内邮件消息中,所以我现在制作了一个单独的类 Controller ,使/隐藏 vCard 语法的详细信息。然后我有一个方法返回 vCard 字符串的 NSData 版本,以将其作为附件直接添加到邮件消息中。这是一个更干净的解决方案,您不需要创建任何文件,即使它们只是临时的。另外,无论如何,您实际上并不需要数据的 NSString 表示形式,除非您确实想创建一个文件并多次使用它来保存重新制作的数据?

我的 Controller 类有许多 -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 的方法来构建地址的数据,其中必须包含 ;分隔符甚至适用于可选地址字段。

关于iphone - 在 iPhone 中创建 vCard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7344267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com