2013-02-26 48 views
7

我想在其他應用程序中打開網絡文件。UIDocumentInteractionController和網絡文件

我的代碼:

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 

回答

3

把你UIDocumentInteractionControllerNSURLConnectionsendAsynchronousRequest塊。

連接完成後,文檔交互控制器必須保持很長時間,但它的作用域爲塊。塊完成後,將不會引用它,它將被釋放。

5

我有一個類似的問題,但我沒有初始化我的UIDocumentInteractionController塊內。我在接口文件中使用了一個屬性來解決這個問題,這樣這個類將強有力地保存UIDocumentInteractionController的實例。

@property (nonatomic, strong) UIDocumentInteractionController *documentController;