最速の方法はありませんが、私は間違いなく私のために働く何かを提案することができます。最善かどうか-決定するのはあなた次第です。
また、あなたの質問は非常に一般的です-それはモバイルアプリのバックエンドインフラストラクチャ全体を網羅しているからです。できるだけ具体的にしようと思います-
1)phpファイルにhttp postリクエストを作成します。これにより、mysqlデータベースのすべてのデータが選択され、結果がアプリに返されます-
結果を受け取ったら、以下の例のようにCoreDataで解析できます-
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)どのデータがコアデータに存在するかを確認する=>何もする必要がなく、どのデータが新しいか=>新しいデータをコアデータに保存する-
タイムスタンプを使用してヘッドコールを実行し、データが更新されているかどうかを確認できます。データが更新されている場合は、個々のCoreData属性を更新するのが少し難しい場合があります。私にとって常にうまくいったのは、デバイス上の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()
を実行できます もう一度メソッド。
お役に立てば幸いです。