【发布时间】:2016-05-23 16:42:25
【问题描述】:
现在我收到错误 Property types for 'value' property do not match. Old type 'float', new type 'double'。如何清除数据库或成功迁移?
【问题讨论】:
-
贴一些不起作用的代码。
现在我收到错误 Property types for 'value' property do not match. Old type 'float', new type 'double'。如何清除数据库或成功迁移?
【问题讨论】:
要从磁盘中彻底删除Realm文件并从头开始,只需使用NSFileManager手动删除即可。
例如删除默认的Realm文件:
NSFileManager.defaultManager().removeItemAtURL(Realm.Configuration.defaultConfiguration.fileURL!)
如果您想保留 Realm 文件,但要完全清空其中的对象,您可以调用 deleteAll() 来执行此操作:
let realm = try! Realm()
try! realm.write {
realm.deleteAll()
}
更新:我觉得我在最初的回答中忽略了这一点。如果您选择从磁盘中删除 Realm 文件,则必须在应用程序的任何线程上打开它之前执行此操作。一旦打开,Realm 会在内部缓存一个对它的引用,即使文件被删除也不会被释放。
如果您确实需要在删除之前打开 Realm 文件以检查其内容,您可以将其包含在 autoreleasepool 中以执行此操作。
【讨论】:
@autoreleasepool 中完成所有这些操作,以便在删除之前释放对旧领域的所有引用。 :)
try? FileManager.default.removeItem(at: Realm.Configuration.defaultConfiguration.fileURL!)
这是在 swift 4.1 中的做法:
FileManager.default.removeItem(at:Realm.Configuration.defaultConfiguration.fileURL!)
【讨论】:
斯威夫特 4.2:
func remove(realmURL: URL) {
let realmURLs = [
realmURL,
realmURL.appendingPathExtension("lock"),
realmURL.appendingPathExtension("note"),
realmURL.appendingPathExtension("management"),
]
for URL in realmURLs {
try? FileManager.default.removeItem(at: URL)
}
let url = Realm.Configuration.defaultConfiguration.fileURL!
remove(realmURL: url)
【讨论】:
虽然其他 cmets 是对的,但您应该真正看看:https://realm.io/docs/swift/latest/#migrations
它对如何进行迁移提供了非常清晰的解释,而且非常简单,如果可以帮助,最好删除所有内容。
【讨论】:
除了使用NSFileManager 删除文件外,还要删除.lock 文件和.management 文件夹。否则,如果你尝试重新创建同名的领域文件,它会给出一个错误,说它找不到它
【讨论】:
斯威夫特 4.2 删除数据库:
func remove(realmURL: URL) {
let realmURLs = [
realmURL,
realmURL.appendingPathExtension("lock"),
realmURL.appendingPathExtension("note"),
realmURL.appendingPathExtension("management"),
]
for URL in realmURLs {
try? FileManager.default.removeItem(at: URL)
}
let url = Realm.Configuration.defaultConfiguration.fileURL!
remove(realmURL: url)
清除数据库:
try? realm.write {
realm.deleteAll()
}
【讨论】:
}正上方let url =...
你试过了吗
let realm = try! Realm()
realm.deleteAllObjects()
您也可以尝试将领域从设备中删除,方法是将其插入计算机,进入 Xcode,然后进入设备,然后在那里找到当前领域并将其删除。
【讨论】:
虽然使用FileManager 对于非同步、非内存领域就足够了,但您可以使用Realm.deleteFiles(for:) 类方法删除给定配置的.realm、.note 和.management 文件, 在 Realm v4.2.0 中引入。
autoreleasepool {
// Before deleting the files, guarantee
// that all realm objects are deallocated.
//
// Deleting a realm file or any of its auxiliary files
// while one or more instances of the realm are open,
// might corrupt the realm or disrupt sync.
}
let configuration: Realm.Configuration = .defaultConfiguration
do {
// Returns `true` if the Realm file for the given
// configuration exists on disk, `false` otherwise.
if Realm.fileExists(for: configuration) {
// Returns `true` if any files were deleted, `false` otherwise.
_ = try Realm.deleteFiles(for: configuration)
}
} catch {
// Handle error
}
当一个领域的所有实例都关闭时,您可以安全地删除这些文件。在删除领域文件之前,请确保备份所有重要对象,因为您将丢失领域中所有未同步的数据。
有关删除领域文件的指导,请参考documentation。
【讨论】: