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