2017-02-15 52 views
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 

     } 

    } 
} 

    } 
} 

這裏所發生的得到的數據在手機上下載到本地的,當我改變它的火力點並不在手機上改本身被下載後

+1

'.observe(.value'正在監聽數據中的變化並在每次數據更改時被調用......您的請求的完成處理程序將在每次發生這種情況時調用 – John

+0

是的,但是當數據已經下載並保存在本地的手機上,如果我想將它更改爲服務器上更新的內容,那麼可以說圖片1是爲服務器下載的,我從服務器上刪除了圖片1,並用圖片2替換了它。我是否從手機本身刪除圖片1並將其替換爲圖片2或至少讓用戶再次下載它 – Khallad

+0

如果您引用的是「FirebaseStorage」,那麼它的工作方式不同,如果您指的是「FirebaseDatabase」,則每個當數據庫中的數據發生某些值更改時,會調用完成處理程序,這意味着'arrayBooks'將具有新的值數據 – John

回答

1

Firebase存儲不會像Firebase實時數據庫那樣同步文件。

您要使用的數據庫同步文件的變化,如在一堆其他的SO職位(像這樣的:Swift Firebase Storage How to retrieve image with unknow name(NSUUID),裏面有你想要的確切代碼),以及我們的I/O談話Zero to App和這是source code

或者,你可以存儲etagmd5哈希本地,做一個元數據獲取,查看是否它們是相同的,如果他們都沒有,獲取新的一個。