レルムをキャッシュとして使用しているので、レルムを削除し、レルム内のいずれかのスキーマを変更すると、最初からやり直すという考えがありました。マイグレーションを行う代わりにレルムを削除できますか?
これは良い戦略ですか?気にするものは何ですか?ここで
は、いくつかのサンプルコードです:
class RealmHelper {
static let SCHEMA_NUMBER = 5
static let SCHEMA_NUMBER_KEY = "Neutum:RealmHelper:SCHEMA_NUMBER"
/// Realm property. This is a computed property to keep thread-safety,
static var realm: Realm = {
let defaults = UserDefaults.standard
// By default is 0
let schemaNumber = defaults.integer(forKey: SCHEMA_NUMBER_KEY)
if schemaNumber < SCHEMA_NUMBER {
RealmHelper.dangerousDeleteAllRealmData()
defaults.set(SCHEMA_NUMBER, forKey: SCHEMA_NUMBER_KEY)
}
return try! Realm()
}()
/// Should only be used in the static intializer. That is, this will cause
/// issues if there are any active instances of Realm.
///
/// See the documentation: https://realm.io/docs/swift/latest/#deleting-realm-files
static func dangerousDeleteAllRealmData() {
let realmURL = Realm.Configuration.defaultConfiguration.fileURL!
do {
try FileManager.default.removeItem(at: realmURL)
var lockURL = realmURL
lockURL.appendPathComponent("lock")
try FileManager.default.removeItem(at: lockURL)
var logAURL = realmURL
logAURL.appendPathComponent("log_a")
try FileManager.default.removeItem(at: logAURL)
var logBURL = realmURL
logBURL.appendPathComponent("log_b")
try FileManager.default.removeItem(at: logBURL)
var noteURL = realmURL
noteURL.appendPathComponent("note")
try FileManager.default.removeItem(at: noteURL)
} catch {
// Do nothing (apparently can't even log ErrorType)
}
}
}
完璧な答えは、ありがとうございました! –