0

次のコードを使用して、アプリケーションから 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:]: nil string parameter'

私が適切かどうかわかりません:

1-私が撮ったスクリーンショットとしてjpgpathを保存します。

2-「dic」ドキュメントを Instagram に渡します。

4

4 に答える 4

12

私のアプリでは、写真を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");

    }

}

これがお役に立てば幸いです。

于 2013-01-19T18:52:13.247 に答える
2

この行で

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

あなたが呼んでfileURLWithPath:います。NSStringまず、これはではなく を期待していますが、エラーメッセージからは isNSURLのように見えます。igImageHookFilenil

于 2013-01-19T18:56:43.243 に答える
0

たくさんの調査が必要でしたが、最終的にこのサイトでこれが役に立ちました。キャプションを含めないように少しトリミングしましたが、それは彼の最初の問題でした...しかし、写真だけを入れる場合は、次のとおりです。

-(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 ];}
}
于 2013-06-17T04:03:41.593 に答える