10

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

该文件的 URL(在 xcode 中查看)是 file://localhost/var/mobile/Applications/ NUMBER OF THE APPLICATION /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:它显示了可用的应用程序(页面,凹凸......)但最终崩溃:(((!看到这里的崩溃图片

4

2 回答 2

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
}
于 2013-04-17T10:14:13.570 回答
0

这是它对我的工作方式:

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

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

于 2013-03-12T18:44:32.750 回答