2017-02-15 5 views
0

私がやりたいことは、アプリを開くたびに、または新しいデータがサーバーから変更されたときに、ローカルに保存されたデータを更新する必要があることです。Firebase Storageのアップデートを確認し、古いコンテンツを置き換えますか?

私はデータが携帯電話上でローカルにダウンロードされると、私は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を削除し、電話機自体から画像1を削除して画像2に置き換えてください。あるいは、ユーザーにもう一度ダウンロードさせてください。 – Khallad

+0

'FirebaseStorage'を参照する場合、' FirebaseDatabase'を参照する場合は別の方法で動作します。完了ハンドラが呼び出されたデータベース内のデータの値が変更されると、これは 'arrayBooks'が新しいデータ – John

答えて

1

Firebase Storageは、Firebase Realtime Databaseと同じ方法でファイルを同期しません。

あなたが他のSO(このような:Swift Firebase Storage How to retrieve image with unknow name(NSUUID)、あなたが望む正確なコードを持っている)の記事の束に示すように、ファイルの変更を同期するためにデータベースを使用するだけでなく、私たちのI/Oの話Zero to Appとそれはあなただけのローカルetagまたはmd5ハッシュを格納し、メタデータは、彼らが同じことをしているかどうかをチェックし、フェッチを行うことができ、またsource code

だし、そうでない場合は、新しいものを取り出します。

関連する問題