首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Objective C在vCard (vcf文件)中附加图像?

如何使用Objective C在vCard (vcf文件)中附加图像?
EN

Stack Overflow用户
提问于 2016-07-27 01:43:45
回答 1查看 721关注 0票数 0

在我的项目中,我需要创建并发送一个vCard (vcf文件),其中必须包括一个图像。我做的一切都是对的,除了我不能将图像添加到vCard。我已经在下面分享了我的代码。

代码语言:javascript
复制
- (IBAction)shareButtonPressed:(UIButton *)sender {

  NSError *error;
  NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]     stringByAppendingPathComponent:@"vCard.vcf"];
  [[self vCardRepresentation] writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];

  UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[@"Test", [NSURL fileURLWithPath:filePath]] applicationActivities:nil];
  activityVC.excludedActivityTypes = @[UIActivityTypePostToWeibo, UIActivityTypeAssignToContact, UIActivityTypeMessage, UIActivityTypeCopyToPasteboard];
  [self presentViewController:activityVC animated:YES completion:^{

}];
}

- (NSString *)vCardRepresentation
{
   NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
   NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"Rokon"], 1.0);

  [mutableArray addObject:@"BEGIN:VCARD"];
  [mutableArray addObject:@"VERSION:3.0"];
  [mutableArray addObject:[NSString stringWithFormat:@"FN:%@", @"Rokon"]];
  [mutableArray addObject:[NSString stringWithFormat:@"TEL:%@",@"+8801811536248"]];
  [mutableArray addObject:[NSString stringWithFormat:@"PHOTO;BASE64:%@",[imageData base64EncodedDataWithOptions:0]]];
  [mutableArray addObject:@"END:VCARD"];

  return [mutableArray componentsJoinedByString:@"\n"];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-28 02:02:49

代码语言:javascript
复制
- (void)shareContact{
        [self emptySandbox];
        NSString *contactName = [NSString stringWithFormat:@"%@ %@",[Person sharedInstance].firstName, [Person sharedInstance].lastName];
        NSError *error;
        NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.vcf", contactName]];
        [[self vCardRepresentation] writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:&error];
        UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:@[contactName, [NSURL fileURLWithPath:filePath]] applicationActivities:nil];

        activityVC.excludedActivityTypes = @[UIActivityTypePostToWeibo, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard];
        [activityVC setValue:contactName forKey:@"subject"];

        [self presentViewController:activityVC animated:YES completion:^{

        }];
 }


- (NSString *)vCardRepresentation
  {
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];

NSData *imageData = UIImageJPEGRepresentation([Person sharedInstance].profileImage, 1.0);

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

[mutableArray addObject:[NSString stringWithFormat:@"FN:%@", [NSString stringWithFormat:@"%@%@", [Person sharedInstance].firstName, [Person sharedInstance].lastName]]];
[mutableArray addObject:[NSString stringWithFormat:@"TEL:%@",[Person sharedInstance].phone]];
[mutableArray addObject:[NSString stringWithFormat:@"email:%@", [Person sharedInstance].email]];
[mutableArray addObject:[NSString stringWithFormat:@"PHOTO;BASE64;ENCODING=b;TYPE=JPEG:%@",[imageData base64EncodedStringWithOptions:0]]];
[mutableArray addObject:@"END:VCARD"];
return [mutableArray componentsJoinedByString:@"\n"];
}

-(void)emptySandbox
{
NSFileManager *fileMgr = [[NSFileManager alloc] init];
NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSArray *files = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:nil];

while (files.count > 0) {
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSArray *directoryContents = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:&error];
    if (error == nil) {
        for (NSString *path in directoryContents) {
            NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:path];
            BOOL removeSuccess = [fileMgr removeItemAtPath:fullPath error:&error];
            files = [fileMgr contentsOfDirectoryAtPath:documentsDirectory error:nil];
            if (!removeSuccess) {
                // Error
            }
        }
    } else {
        // Error
    }
 }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38596600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档