文件共享/在另一个应用程序中发送文件(在iOS中“打开”)

时间:2013-03-12 15:40:46

标签: iphone ios xcode file share

我的应用制作一个名为log.txt的简单文件

此文件的URL(在xcode中查看)是file:// localhost / var / mobile / Applications / 应用程序编号 /Documents/log.txt

所以我可以在finder中看到这个文件......

我想在我的应用中添加“打开”功能,以便用户分享此文件(通过邮件或imessage)或在另一个兼容的应用中打开此文件。

以下是我的工作:

-(void) openDocumentIn {

NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:docFile]; //docFile is the path
//NSLog(@"%@",fileURL); // -> shows the URL in the xcode log window

UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
documentController.delegate = self;
documentController.UTI = @"public.text";
[documentController presentOpenInMenuFromRect:CGRectZero
                                       inView:self.view
                                     animated:YES];
}

然后调用此函数:

-(IBAction)share:(id)sender {
    [self openDocumentIn];
}

当我运行应用程序时,我点击了这个“共享”按钮,但没有任何附加内容,只是在日志窗口中显示了URL的路径...

我错过了什么......

由于

编辑:最后,它适用于我真正的iPhone ...模拟器中没有文本查看器! - '

编辑2:它显示可用的应用程序(页面,碰撞......)但最终崩溃:(((!see here for the crash picture

2 个答案:

答案 0 :(得分:41)

它是一个内存管理问题。它崩溃的主要原因是因为没有保留对象。这就是为什么如果你在.h文件中声明它并在你分配它时为保留写一个@property就会保留对象。

所以在你的界面文件(.h)中你应该有

@property (retain)UIDocumentInteractionController *documentController;

然后在你的.m(实现文件)中你可以做到

@synthesize documentController;

- (void)openDocumentIn{

    // Some code here

    self.documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
        documentController.delegate = self;
    documentController.UTI = @"public.text";
    [documentController presentOpenInMenuFromRect:CGRectZero
                                   inView:self.view
                                 animated:YES];
    // Some more stuff
}

答案 1 :(得分:0)

以下是它对我有用的方法:

我只是将声明“UIDocumentInteractionController * documentController”放在.h文件中,它就可以了!

我真的不知道为什么,但是......