我想在其他应用中通过网络打开文件。
我的代码:
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
答案 0 :(得分:5)
我有类似的问题,但我没有在块中初始化我的UIDocumentInteractionController。我使用我的接口文件中的属性解决了这个问题,以便该类强烈地保留UIDocumentInteractionController的实例。
@property (nonatomic, strong) UIDocumentInteractionController *documentController;
答案 1 :(得分:3)
从UIDocumentInteractionController
NSURLConnection
块中取出sendAsynchronousRequest
。
文档交互控制器必须在连接完成后保持很长时间,但它的作用域是块。块完成后,将不会引用它,它将被取消分配。