[英]App not crashing when i add/Modify new attribute to the data model without using any Migration (IOS 10+)
我已经上网了很多。 但没有得到满意的答复。
我的问题是我正在使用带有持久性容器(iOS 10+)的Core数据。我已经发布了具有某些数据模型的应用程序的第一个版本。后来我在旧数据模型实体中添加了新属性,然后在iPhone中的旧数据而不进行任何迁移。但是应用程序不会崩溃,甚至不会记录任何错误。
根据文档,如果对数据模型的任何更改使得与持久性存储不兼容,则必须进行迁移,否则应用程序中断。
这是我的代码,让我知道我想念的任何东西。
初始化Coredata堆栈
import Foundation
import CoreData
class DatabaseController{
// MARK: - Core Data stack
static var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "Test")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
abort()
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
static func saveContext () {
let context = DatabaseController.persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
}
存储样本数据
let managedObjectContext = DatabaseController.persistentContainer.viewContext
let employee = NSEntityDescription.insertNewObject(forEntityName: "University", into: managedObjectContext) as! University
employee.testName = "Check"
employee.age = "21"
employee.createdDate = "21-2-2019"
do{
try managedObjectContext.save()
}
catch let error{
print(error)
}
检索样本数据
do{
let universityEmployeeFetch = NSFetchRequest<NSManagedObject>(entityName: "University")
let fetchedRecords = try managedObjectContext.fetch(universityEmployeeFetch) as! [University]
for employee in fetchedRecords{
if let name = employee.testName,let age = employee.age, let createdDate = employee.createdDate{
print(name,age,createdDate)
}
}
}catch let error{
fatalError()
}
数据模型如下所示,其中标记为一个的是新添加的属性
快速查看您的代码表明Core Data能够自动执行轻量级迁移 。
从链接:
如果仅对模型进行简单的更改(例如向实体添加新属性),则Core Data可以执行自动数据迁移,称为轻量级迁移 。
核心数据模型版本控制和数据迁移-Apple文档
核心数据在其自动支持的更改中具有令人惊讶的灵活性,其中包括:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.