【问题标题】:Exporting a photo to Instagram将照片导出到 Instagram
【发布时间】:2013-01-19 18:34:19
【问题描述】:

我正在尝试使用以下代码将照片从我的应用程序导出到 Instagram:

// Capture Screenshot
UIGraphicsBeginImageContextWithOptions(self.view.frame.size,self.view.opaque,0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.igo"];
NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]];
dic = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:igImageHookFile]];
dic.UTI = @"com.instagram.photo";
dic.annotation = [NSDictionary dictionaryWithObject:@"my caption" forKey:@"InstagramCaption"];
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
  [[UIApplication sharedApplication] openURL:instagramURL];
} else {
  NSLog(@"No Instagram Found");
}

但它不起作用。它崩溃并出现以下错误:

2013-01-19 20:40:41.948 Ayat[12648:c07] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* -[NSURL initFileURLWithPath:]:无字符串参数'

我不确定我是否正确:

1- 将 jpgpath 保存为我截取的屏幕截图。

2- 将“dic”文档传递给 Instagram。

【问题讨论】:

  • 定义“不工作”。编译器警告/错误?碰撞?什么?请明确点。你用过调试器吗?您是否验证了所有变量都具有预期值? if 语句会发生什么?
  • maddy.. 它崩溃并出现以下错误:2013-01-19 20:40:41.948 Ayat[12648:c07] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:' *** -[NSURL initFileURLWithPath:]: nil string parameter' 我不确定我是否正确:1- 将 jpgpath 保存为我拍摄的屏幕截图 2- 使用“dic”文档打开 instagram
  • 用更多细节更新您的问题。

标签: iphone ios xcode instagram uidocument


【解决方案1】:

在我的应用程序中,我还将照片导出到 Instagram。 (图片必须大于 612x612 尺寸) 试试这个代码:

-(void)shareImageOnInstagram:(UIImage*)shareImage
{
    //Remember Image must be larger than 612x612 size if not resize it.   

    NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];

    if([[UIApplication sharedApplication] canOpenURL:instagramURL])
    {
        NSString *documentDirectory=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        NSString *saveImagePath=[documentDirectory stringByAppendingPathComponent:@"Image.ig"];
        NSData *imageData=UIImagePNGRepresentation(shareImage);
        [imageData writeToFile:saveImagePath atomically:YES];

        NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath];

        UIDocumentInteractionController *docController=[[UIDocumentInteractionController alloc]init];
        docController.delegate=self;
        [docController retain];
        docController.UTI=@"com.instagram.photo";

        docController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:@"Image Taken via @App",@"InstagramCaption", nil];

        [docController setURL:imageURL];


        [docController presentOpenInMenuFromBarButtonItem:self.navigationItem.rightBarButtonItem animated:YES];  //Here try which one is suitable for u to present the doc Controller. if crash occurs

    }
    else
    {
        NSLog (@"Instagram not found");

    }

}

希望对你有帮助。

【讨论】:

  • 非常感谢。回答了我的问题并完美地工作
  • 您好,我使用的是相同的代码,但它不适用于 ios 8 是否有人有同样的问题
  • 您面临的问题是什么?
【解决方案2】:

在这条线上

dic = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:igImageHookFile]];

您正在致电fileURLWithPath:。首先,这需要NSString,而不是NSURL,但从您的错误消息看来igImageHookFilenil

【讨论】:

    【解决方案3】:

    我进行了大量研究,但我终于在这个网站上找到了这个有帮助的。我只是把它修整了一点,不包括标题,因为那是他最初的问题……但如果你只是把图片放进去,那就是:

    -(void)shareImageOnInstagram
    {
    //Remember Image must be larger than 612x612 size if not resize it.
     NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
    if ([[UIApplication sharedApplication] canOpenURL:instagramURL]){
        NSString *urlString = [[NSString alloc] initWithFormat:@"file://%@", blendedImageURL];
        NSURL *imageUrl = [[NSURL alloc] initWithString: urlString];
        self.docController = [self setupControllerWithURL:imageUrl usingDelegate:self];
        self.docController.UTI = @"com.instagram.exclusivegram";
       // self.docController.annotation = [NSDictionary dictionaryWithObject:@"I want to     share this text" forKey:@"InstagramCaption"];
        [self.docController presentOpenInMenuFromRect: self.view.frame inView: self.view     animated: YES ];}
    }
    

    【讨论】:

      【解决方案4】:

      我尝试了以下代码,它成功了:

      - (void) shareImageWithInstagram
      {
          NSURL *instagramURL = [NSURL URLWithString:@"instagram://"];
          if ([[UIApplication sharedApplication] canOpenURL:instagramURL])
          {
              UICachedFileMgr* mgr = _gCachedManger;
              UIImage* photoImage = [mgr imageWithUrl:_imageView.image];
              NSData* imageData = UIImagePNGRepresentation(photoImage);
              NSString* captionString = [NSString stringWithFormat:@"%@%@",self.approvedData.approvedCaption,self.approvedData.tag];
              NSString* imagePath = [UIUtils documentDirectoryWithSubpath:@"image.igo"];
              [imageData writeToFile:imagePath atomically:NO];
              NSURL* fileURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"file://%@",imagePath]];
      
              self.docFile = [[self setupControllerWithURL:fileURL usingDelegate:self]retain];
              self.docFile.annotation = [NSDictionary dictionaryWithObject: captionString
                                                               forKey:@"InstagramCaption"];
              self.docFile.UTI = @"com.instagram.photo";
      
              // OPEN THE HOOK
              [self.docFile presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES];
          }
          else
          {
              [UIUtils messageAlert:@"Instagram not installed in this device!\nTo share image please install instagram." title:nil delegate:nil];
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多