为什么imageRef.data
总是nil
?我在窥视函数中有imageRef.data
但它不属于那里?当我偷看时(我假设图像开始下载)它会工作,然后当我在iPhone上用力按压时,图像会显示出来。但大多数时候我都会遇到nil
错误。
现在,我已将该逻辑移入pop功能,现在它始终是fatal error: unexpectedly found nil while unwrapping an Optional value
import UIKit
import FirebaseStorage
extension ExpenseFeedVC: UIViewControllerPreviewingDelegate {
// PEEK
func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
guard let indexPath = tableView.indexPathForRow(at: location),
let cell = tableView.cellForRow(at: indexPath) else { return nil}
guard let expensePreview = storyboard?.instantiateViewController(withIdentifier: "expensePreviewVC") as? ExpensePreviewVC else {return nil }
expensePreview.selectedItem = expenses[indexPath.row].type
quickActionString = expenses[indexPath.row].type
let imageUrl: String = expenses[indexPath.row].receiptUrl
urlToPass = imageUrl
expensePreview.preferredContentSize = CGSize(width: 0, height: 150)
previewingContext.sourceRect = cell.frame
return expensePreview
}
// POP
func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
if let rvc = storyboard?.instantiateViewController(withIdentifier: "receiptImagePreviewVC") as? ReceiptImagePreviewVC {
let imageRef = FIRStorage.storage().reference(forURL: urlToPass)
imageRef.data(withMaxSize: 2*1024*1024, completion: { (data, error) in
print(data!)
})
rvc.poppedImage = self.imageToPass
show(rvc, sender: self)
}
}
}
我把它从"偷看"因为如果我快速强行触摸,我会收到错误。如果我偷看,等几秒钟,然后再按下,我看到图像。最好放置imageRef.data
以及为什么data
是nil
(在pop函数中)?
urlToPass
始终返回正确的图片网址。
答案 0 :(得分:0)
异步编程的经典问题 - 下载没有立即发生,这就是为什么它等待几秒后才能运行的原因。你需要这样做:
let imageRef = FIRStorage.storage().reference(forURL: urlToPass)
imageRef.data(withMaxSize: 2*1024*1024, completion: { (data, error) in
// Check for an error
...
// Prepare to switch to the next VC once the file has downloaded
rvc.poppedImage = UIImage(data: data!)
show(rvc, sender: self)
})