0
我想要做的是每次打開應用程序或從服務器更改了新數據時,應該更新本地保存的數據。檢查Firebase存儲上的更新並替換舊內容?
我已經使用這個代碼下載和保存本地數據
override func viewDidLoad() {
super.viewDidLoad()
if book?.bookPath != book?.bookPath {
print("HERE \(book?.bookPath)")
loadReader(filePaht: (book?.bookPath)!)
} else {
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
let strName = book?.id
let filePath = "\(documentsPath)/"+strName!+".pdf"
let fileManager = FileManager.default
if fileManager.fileExists(atPath: filePath) {
loadReader(filePaht: filePath)
return;
}
let reference = FIRStorage.storage().reference(forURL: (self.book?.bookURL)!)
downloadTask = reference.data(withMaxSize: 50 * 1024 * 1024) { (data, error) -> Void in
if (error != nil) {
} else {
if ((try! data?.write(to: URL.init(fileURLWithPath: filePath, isDirectory: false))) != nil) {
self.db.upDate(id: (self.book?.id)!, bookPath: filePath)
self.loadReader(filePaht: filePath)
}
}
}
downloadTask.observe(.resume) { (snapshot) -> Void in
// Download resumed, also fires when the download starts
}
downloadTask.observe(.pause) { (snapshot) -> Void in
// Download paused
}
downloadTask.observe(.progress) { (snapshot) -> Void in
}
downloadTask.observe(.success) { (snapshot) -> Void in
}
downloadTask.observe(.failure) { (snapshot) -> Void in
}
}
}
}
}
這裏所發生的得到的數據在手機上下載到本地的,當我改變它的火力點並不在手機上改本身被下載後
'.observe(.value'正在監聽數據中的變化並在每次數據更改時被調用......您的請求的完成處理程序將在每次發生這種情況時調用 – John
是的,但是當數據已經下載並保存在本地的手機上,如果我想將它更改爲服務器上更新的內容,那麼可以說圖片1是爲服務器下載的,我從服務器上刪除了圖片1,並用圖片2替換了它。我是否從手機本身刪除圖片1並將其替換爲圖片2或至少讓用戶再次下載它 – Khallad
如果您引用的是「FirebaseStorage」,那麼它的工作方式不同,如果您指的是「FirebaseDatabase」,則每個當數據庫中的數據發生某些值更改時,會調用完成處理程序,這意味着'arrayBooks'將具有新的值數據 – John