来自web的UIDocumentInteractionController和文件

时间:2013-02-26 19:32:34

标签: ios xcode cocoa-touch

我想在其他应用中通过网络打开文件。

我的代码:

NSURLRequest *req = [[NSURLRequest alloc] initWithURL:url];
[NSURLConnection sendAsynchronousRequest:req queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *resp, NSData *respData, NSError *error){
    NSLog(@"resp data length: %i", respData.length);
    NSArray *names = [objDict[@"name"] componentsSeparatedByString:@"."];
    NSString *fileName = [@"downloaded." stringByAppendingString:names[names.count-1]];
    NSString * path = [NSTemporaryDirectory() stringByAppendingPathComponent:fileName];
    NSError *errorC = nil;
    BOOL success = [respData writeToFile:path 
                 options:NSDataWritingFileProtectionComplete
                   error:&errorC];

    if (success) {
        UIDocumentInteractionController *documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]];
        documentController.delegate = self;
        [documentController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES];
    } else {
        NSLog(@"fail: %@", errorC.description);
    }
}];

它显示面板,但点击任何按钮时崩溃(不仅仅是'取消')。

我启用了僵尸对象并写道:

-[UIDocumentInteractionController URL]: message sent to deallocated instance

2 个答案:

答案 0 :(得分:5)

我有类似的问题,但我没有在块中初始化我的UIDocumentInteractionController。我使用我的接口文件中的属性解决了这个问题,以便该类强烈地保留UIDocumentInteractionController的实例。

@property (nonatomic, strong) UIDocumentInteractionController *documentController;

答案 1 :(得分:3)

UIDocumentInteractionController NSURLConnection块中取出sendAsynchronousRequest

文档交互控制器必须在连接完成后保持很长时间,但它的作用域是块。块完成后,将不会引用它,它将被取消分配。