2013-04-04 55 views
0

要序列化pdf,我相信你可以使用NSData dataWithURL:並存儲在Core Data中。我不確定你將如何反序列化爲pdf然後用UIWebView查看它。如何在Core Data iOS中序列化和反序列化pdf?

+0

另一種選擇是將您的PDF文件託管在某個Web服務器上,然後從該服務器下載PDF數據並將其保存/緩存到設備上。這將使商店下載(特別是通過手機),並讓用戶更快地進入你的應用。 – 2013-04-04 00:26:30

+0

我意識到這實際上是兩個問題。您提供意見的人在這裏:http://stackoverflow.com/questions/15800589/loading-images-from-appbundle-vs-coredata。另外,如果我的用戶在離開wifi或手機數據之前沒有進入應用程序,該怎麼辦?第一次運行此應用程序時,顯示錯誤說明您必須處於聯機狀態,這是不錯的做法嗎? – 2013-04-04 00:29:13

+0

你不是序列化你只是存儲二進制數據。然後,您可以使用loaddata方法加載nsdata對象,只需設置正確的MIME類型即可。 – Bushbert 2013-04-04 01:04:44

回答

0

您可以使用CGPDFDocumentCreateWithProvider

如果你的NSData引用pdfData則:

CFDataRef myPDFData  = (CFDataRef)pdfData; 
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData); 
CGPDFDocumentRef pdf  = CGPDFDocumentCreateWithProvider(provider); 

但我猜你只是想在Web視圖中顯示它和上面是不是你所需要的。

但是,如果您已經有了url,那麼存儲URL而不是像PDF這樣更容易。

此外,如果您有數據,您可以暫時將它寫入文檔目錄內的文件中,然後使用web視圖加載此url。

即;

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"New1.pdf"]; 
NSURL *fileURL = [NSURLRequest requestWithURL:appFile]; 
[data writeToURL:fileURL atomically:YES]; 

然後:

NSURLRequest *request = [NSURLRequest requestWithURL:fileURL]; 
[webView loadRequest:request]; 

如果你想刪除從文件目錄中的文件,你可以使用:

[[NSFileManager defaultManager] removeItemAtURL:fileUrl error:nil]; 

刪除您創建的臨時PDF文件。