簡體   English   中英

點擊QLPreviewController ios 4.2中的菜單操作按鈕,iPhone-應用程序崩潰

[英]iPhone- application crashes on click of menu action button in QLPreviewController ios 4.2

 When I try to click the menu action button in QLPreviewController the application crashes.

這就是我在委托方法中所做的

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index
{

    NSMutableString*Url = [[NSMutableString alloc] initWithFormat:@"http://10.30.24.21/Documents/abc.doc];

    NSURL *fileURL;
    fileURL = [NSURL URLWithString:Url];// the url of the file which is present in NAS device
    [Url release];
    return fileURL;
}

這是崩潰報告

2011-01-11 12:21:36.717 iLink[5548:207] *** Assertion failure in -[UIDocumentInteractionController setURL:], /SourceCache/UIKit_Sim/UIKit-1447.6.4/UIDocumentInteractionController.m:1060
2011-01-11 12:21:36.720 iLink[5548:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UIDocumentInteractionController: invalid scheme https.  Only the file scheme is supported.'

當我嘗試在本地預覽文件時,菜單操作按鈕單擊不會崩潰。

那里我會用

 NSURL *fileURL;
    fileURL = [NSURL fileURLWithPath:filePath];// filePath is local file path.

我明白當我們預覽本地文件時([NSURL fileURLWithPath:filePath])菜單操作按鈕點擊不會崩潰,當我們從服務器預覽文件時([NSURL URLWithString:url])菜單操作按鈕點擊崩潰。

我有兩個問題,1。我們可以禁用菜單操作按鈕嗎? 2.有沒有辦法使用[NSURL URLWithString:Url]來避免崩潰?

謝謝

需要使用

[NSURL fileURLWithPath:urPath]

雖然以前的答案給出了正確的技術響應,但我想詳細說明。

QLPreviewItem的API文檔說URL 必須是文件類型的URL, NSURL文檔說這意味着“使用file: scheme”。

您還可以從Document Interaction Progamming指南中閱讀更多內容,該指南提到QuickLook應該通過讓您決定它的呈現方式來為您提供比UIDocumentInteractionController更多的控制,但它帶來了與您已經相同的假設在本地獲得一個文件 ,您只需要一種方法來顯示它,並(使用QuickLook)使用AirPrint打印它。

在您的情況下,最好將文件下載到應用程序的Caches目錄,然后打開QL預覽 - 無論如何它已經被預覽視圖下載 ,所以您也可以抓住它以便也可以打印它。

NSArray *paths  = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
// Here you'll _probably_ want to use a filename that's got the correct extension...but YMMV
NSURL *cacheURL = [NSURL fileURLWithPath:[[paths objectAtIndex:0] stringByAppendingPathComponent: @"current.pdf"]];

現在,獲取原始URL並下載內容並將其保存在cacheURL 如果您使用ASIHTTPRequest ,它看起來像這樣:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:originalURL];
[request setDownloadDestinationPath:[cacheURL path]];
// Yup. You could optimize here if needed...
[request startSynchronous];

然后在QuickLook視圖中使用文件URL ...

- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index {
    // Assuming you've saved this somewhere, etc...
    return self.cacheURL;
}

在這種情況下,您從NAS查看的每個新PDF都會覆蓋前一個(相同名稱,相同目錄),因此您可以限制磁盤使用量。 顯然,有很多方法可以解決這個問題,所以選擇一個適合你的方法。 但關鍵是要在本地下載文件並至少保留它,直到QL視圖被解除為止。

有沒有辦法使用[NSURL URLWithString:Url]來避免崩潰?

首先將文件下載到本地文件系統。

我能夠使用HTTP方案顯示PDF文件。 當用戶按下打印按鈕時,應用程序崩潰。 因此,我需要一種方法來通過HTTP顯示PDF並禁用打印按鈕所需的懲罰。 在viewDidAppear中禁用子類中的按鈕這是我的代碼

@interface PreviewController : QLPreviewController
@end

@implementation PreviewController
-(void) viewDidAppear:(BOOL)animated {
    self.navigationItem.rightBarButtonItem = nil;
}
@end

並用作代碼:

// use the new class
QLPreviewController *previewController = [[PreviewController alloc] init];
previewController.delegate = self;
previewController.dataSource = self;
[self.navigationController pushViewController:previewController animated:FALSE];

順便提一下你的陳述
NSMutableString*Url = [[NSMutableString alloc] initWithFormat:@"http://10.30.24.21/Documents/abc.doc];有拼寫錯誤。你錯過了”表示url字符串的結尾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM