[英]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.