2014-10-06 94 views
1

我想要「打開」菜單讓我的應用程序打開一個文件,另一個用戶可以選擇。 這是我的代碼,但我不能讓它工作Swift:打開「在菜單中」選項

var url: NSURL! = NSBundle.mainBundle().URLForResource(filename, withExtension: "pbz") 
     self.controller = UIDocumentInteractionController(URL:  NSBundle.mainBundle().URLForResource(filename, withExtension: "pbz")!) 
     let v = sender as UIView 
     let ok = self.controller.presentOpenInMenuFromRect(v.bounds, inView: self.view, animated: true) 

你有想過這事?它編譯但在運行時在第二條指令處給我一個EXC_BAD_INSTRUCTION錯誤。 熟悉的代碼爲我工作Objective-C

回答

0

filename .pbz由於某種原因可能不存在於您的主包中。用你當前的代碼,這將是一個致命的錯誤,並導致你的應用程序崩潰。

通過將url聲明爲NSURL!,您隱式地在您的第一行上展開url。通過在您致電URLForResource的電話上附加!,您可以在第二行上強制解開NSURL。如果filename .pbz未在您的主包中找到,那麼您的應用程序將在第二行中崩潰,或者如果您在nil的某個位置嘗試使用url

,才應使用武力展開,如果你是絕對確保變量將永遠nil,並且只使用隱式展開,如果你是絕對肯定的變量不會nil當您使用它。

你應該做的是在你嘗試使用它之前檢查以確保你從URLForResource得到的url不是nil。您可以使用Optional Binding做到這一點很容易和安全地

if let url = NSBundle.mainBundle().URLForResource(filename, withExtension: "pbz") { 
    self.controller = UIDocumentInteractionController(URL: url) 
    let v = sender as UIView 
    let ok = self.controller.presentOpenInMenuFromRect(v.bounds, inView: self.view, animated: true) 
} else { 
    /* resource doesn't exist */ 
} 
+0

你說得對:d也感謝爲解決方案 – FrCr 2014-10-07 06:28:47

相關問題