user3355723
user3355723

Reputation: 235

Adding NSData attachment to Twitter as an image post

Currently my app gives the option to save to device, or email, the latter attaching the image automatically to the mail, I am looking to add a post to twitter option, simply attaching the image and posting to Twitter, I have done this a few times with other apps, but cannot seem to get this one working.

Here is the process for email;

-(void)displayComposerSheet 
{
     MFMailComposeViewController *mail = [[MFMailComposeViewController alloc] init];
     mail.mailComposeDelegate = self;

     [mail setSubject:@""];

     NSString* path =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/email.png"];
     [mSplashView SaveResultImage:path];

     [mail addAttachmentData:[NSData dataWithContentsOfFile:path]  mimeType:@"image/png" fileName:@"Attached image"];

     NSString *msg = [NSString stringWithFormat:@"I made this image!", [UIDevice currentDevice].model];

     NSString* mailcontent =  [NSString stringWithFormat:@"<br> %@ <br>", msg];
     [mail setMessageBody:mailcontent isHTML:YES];

     [self presentModalViewController:mail animated:YES];

     [mail release];
}

I am struggling to see how I can use similar to attach the image to Twitter, I currently use this code, but it crashes when attempting to post;

    TWTweetComposeViewController *twitter = [[TWTweetComposeViewController alloc] init];
    [self presentViewController:twitter animated:YES completion:nil];

   NSString* path =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/email.png"];
    [mSplashView SaveResultImage:path];


    [twitter setInitialText:@"I made this image!"];
    [twitter addURL:[NSData dataWithContentsOfFile:path]];

    twitter.completionHandler = ^(TWTweetComposeViewControllerResult res) {

        if(res == TWTweetComposeViewControllerResultDone) {

            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Thank you" message:@"Posted successfully to Twitter." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];

            [alert show];

        }
        if(res == TWTweetComposeViewControllerResultCancelled) {

            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Cancelled" message:@"You Cancelled posting the Tweet." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];

            [alert show];

        }

        [self dismissViewControllerAnimated:YES completion:nil];

    };


}

Normally I could simply call [twitter addImage:]; but unfortunately it seems the image is not grabbed correctly without going through the processes above in the mail sheet.

Upvotes: 0

Views: 130

Answers (2)

V.D
V.D

Reputation: 403

 NSString* path =[NSHomeDirectory() stringByAppendingPathComponent:@"Documents/imgtweet.png"];
       [UIImagePNGRepresentation(imageView.image) writeToFile:path atomically:YES];
        //NSLog(@"path %@",path);
        UIImage *new_image = [UIImage imageWithContentsOfFile:path];
        if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
        {
            SLComposeViewController *tweetSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
            [tweetSheet setInitialText:self.txtContent.text];
            [tweetSheet addImage:new_image];
            [self presentViewController:tweetSheet animated:YES completion:nil];
        }

Using Previous Answer,Thanks :) Happy coding :)

Upvotes: 0

rock88
rock88

Reputation: 61

You can't pass NSData for -addURL: method.

If your image store on disk, you can create image with [UIImage imageWithContentsOfFile:imagePath] method. Next add it with -addImage:

Upvotes: 2

Related Questions