2016-03-03 149 views
0

在我的swift 2應用程序中,用戶可以將數據保存在覈心數據中。未來,我想知道數據將保存在覈心數據和MYSQL數據庫中。swift同步數據的核心數據mysql數據庫

什麼是同步核心數據和MySQL之間數據的最佳方式

我的想法是,這對每個應用程序啓動進程將啓動:

  • 做一個HTTP POST請求的PHP文件,其中選擇了MySQL數據庫的所有數據,並給出結果返回給應用程序
  • 檢查其核心數據存在數據=>無關,以及哪些數據是新的=>保存核心數據的新數據

這是做到這一點的最好和最快捷的方法嗎?

+0

沒有想法嗎? OO – Stack108

回答

2

有沒有最快的方法,但我絕對可以建議一些適合我的東西。最好還是不 - 它取決於你自己決定。

此外,您的問題是非常通用的 - 因爲它包含了移動應用程序的整個後端基礎架構。我會盡量具體,我可以 -

1)做一個HTTP POST請求的PHP文件,它可以選擇MySQL數據庫的所有數據,並給其結果返回給應用程序 -

一旦您收到的結果,你可以分析它的核心數據如下面的例子 -

func writeDataToSqliteStore() throws { 

       // Configure the Network Call here with NSURL & NSData returning an array that you can write to the Core Data SQLITE backend. 
      do { 
       jsonResponse = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as? NSArray 
      } catch { 
       print(error) 
      } 
       let localEntity = self.insertNewEntity("EntityName") as? CoreDataEntityClass 

       for singleObject in jsonResponse { 

        localEntity.name = singleObject.valueForKey("name") 
        localEntity.address = singleObject.valueForKey("address") 
      } 
    } 

2)檢查該數據在覈心數據存在=>無關,以及哪些數據是新的=>保存新數據在覈心數據 -

你可以做一個時間戳的好頭部呼叫,並檢查我f數據已更新。 如果數據已更新 - 它可能會更新一些個人核心數據屬性。一直以來,我一直在刪除設備上的SQLITE後端,並再次運行數據寫入方法。 您可以使用下面的例子 -

func removeSQLITEFiles() { 
    let fileManager = NSFileManager.defaultManager() 
     let URL1 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite") 
     let URL2 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite-wal") 
     let URL3 = self.applicationDocumentsDirectory.URLByAppendingPathComponent("File.sqlite-shm") 

     if fileManager.fileExistsAtPath(URL1.path!) { 
      do { 
      try fileManager.removeItemAtURL(URL1) 
      } 
      catch {error} 
     } 

     if fileManager.fileExistsAtPath(URL2.path!) { 
      do { 
       try fileManager.removeItemAtURL(URL2) 
      } 
      catch {error} 
     } 

     if fileManager.fileExistsAtPath(URL3.path!) { 
      do { 
       try fileManager.removeItemAtURL(URL3) 
      } 
      catch {error} 
     } 

    } 

之後,你可以再次運行writeDataToSqlieStore()方法。

希望有所幫助。