2013-02-10 26 views
0
禁用某些服务

我有以下代码张贴照片到Instagram的:在UIDocumentController

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString* homePath = [paths objectAtIndex:0]; 
    NSString* basePath = @"integration/instagram"; 
    NSString* tmpFileName = @"jumpto.ig"; 

    NSString* dirPath = [NSString stringWithFormat:@"%@/%@", homePath, basePath]; 
    NSString* docPath = [NSString stringWithFormat:@"%@/%@", dirPath, tmpFileName]; 

    //clear it out and make it fresh 
    [[NSFileManager defaultManager] removeItemAtPath:docPath error:nil]; 
    if ([[NSFileManager defaultManager] createDirectoryAtPath:dirPath withIntermediateDirectories:YES attributes:nil error:nil]) { 

     NSData* imgData = [self generateImageData:img]; 
     [[NSFileManager defaultManager] createFileAtPath:docPath contents:imgData attributes:nil]; 
     NSURL* url = [NSURL fileURLWithPath:docPath isDirectory:NO ]; 

     NSURL *instagramURL = [NSURL URLWithString:@"instagram://camera"]; 
     if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) { 
      //imageToUpload is a file path with .ig file extension 
      self.documentInteractionController = [UIDocumentInteractionController interactionControllerWithURL:url]; 
      self.documentInteractionController.UTI = @"com.instagram.exclusivegram"; 
      self.documentInteractionController.delegate = self; 
      self.documentInteractionController.annotation = [NSDictionary dictionaryWithObject:@"Caption Test" forKey:@"InstagramCaption"]; 
      [self.documentInteractionController presentOptionsMenuFromBarButtonItem:self.navigationItem.rightBarButtonItem animated:YES]; 
     } 
    } 

的问题是,当我打开酥料饼的,我看其他的服务,如Facebook/Twitter的/邮件/打印/分配给联系人/复制/等。我如何做到这一点,我只有一个在Instagram上打开的选项?

+0

如果您只想支持特定服务(Instagram),那么为什么要使用'UIDocumentInteractionController'?提供您自己的简单用户界面(可能是警报或操作表)。如果用户说“是”,那么您可以使用正确的URL直接启动Instagram。 – rmaddy 2013-02-10 17:46:36

+0

为什么你不能禁用其他选项? – adit 2013-02-10 17:47:33

+0

因为你不行。这没有API。 “UIDocumentInteractionController”的意义在于向用户展示支持特定文件/ UTI的所有可能的应用程序。 – rmaddy 2013-02-10 17:48:49

回答

2

Instagram会同时收听.jpg/.ig文件以及名为.igo(仅限Instagram)的特殊扩展名。通过改变文件名.igo,只有Instagram的,应在列表中显示出来:

NSString* tmpFileName = @"jumpto.igo"; 

来源:Instagram iPhone Hooks

编辑:我想有一个与你是如何写入文件的逻辑问题。而不是使用的NSFileManager写出来的这条线的内容:

[[NSFileManager defaultManager] createFileAtPath:docPath contents:imgData attributes:nil]; 

尝试使用NSData对象本身它被写入到地方:

[imgData writeToFile:docPath atomically:NO]; 

我不能肯定,这将导致不同的文件,但我想知道NSFileManager用数据创建文件的方式与NSData直接写入数据的方式不同。

+0

我将它改为.igo,我仍然看到其他服务 – adit 2013-02-10 17:59:10

+0

很奇怪。你如何生成图像? 'UIImageJPEGRepresentation'? – Tim 2013-02-10 18:03:42

+0

我正在使用UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); – adit 2013-02-10 18:04:34