我在不太长时间内使用Realm进行缓存,并且无需跟踪架构版本或在任何时候迁移数据模型。
因此,在数据模型发生变化的任何时候,我的应用程序如何通过吹走默认的Realm并从头开始巧妙地处理差异,而不是崩溃?
提前致谢!
答案 0 :(得分:3)
自从Swift 2引入了try / catch以来,这对我来说就像是一种魅力。我只是在发布时从我的应用代表处拨打testRealmFile()
,之后一切都很酷。
func testRealmFile(){
do {
try Realm().objects(Model1)
try Realm().objects(Model2)
} catch {
print("can't access realm, migration needed")
deleteRealmFile()
}
}
func deleteRealmFile(){
if let path = Realm.Configuration.defaultConfiguration.path {
do{
try NSFileManager.defaultManager().removeItemAtPath(path)
print("realm file deleted")
} catch {
print("no realm file to delete")
}
}
}
答案 1 :(得分:1)
Realm Configuration对象现在有一个名为for (int i = 0; i<peopleArray.size(); i++)
{
for (int j = 0; j<peopleArray.size(); j++)
{
LocalDate firstDate = LocalDate.of(Integer.parseInt(peopleArray.get(i).getDOBYear()),
Integer.parseInt(peopleArray.get(i).getDOBMonth()),
Integer.parseInt(peopleArray.get(i).getDOBDay()));
LocalDate secondDate= LocalDate.of(Integer.parseInt(peopleArray.get(j).getDOBYear()),
Integer.parseInt(peopleArray.get(j).getDOBMonth()),
Integer.parseInt(peopleArray.get(j).getDOBDay()));
if(firstDate.isAfter(secondDate))
{
Person temp = peopleArray[i];
peopleArray[i] = peopleArray[j];
peopleArray[j] = temp;
}
}
}
的属性(在Objective C中也可用),如果设置为deleteRealmIfMigrationNeeded
,则会在需要迁移时自动删除Realm数据库文件。
请注意,如果您在删除数据库文件之前检查是否需要迁移,则可能需要其他一些方法(例如,如果您希望在删除之前进行用户确认)。
答案 2 :(得分:0)
最简单的方法是检查Realm.schemaVersionAtPath(_:)
并查看该架构版本是否低于当前架构版本。您还可以关注https://github.com/realm/realm-cocoa/issues/1692,其中建议添加更精确的API(不需要碰撞您的架构版本),以便您检测是否需要迁移。