sha*_*oga 6 core-data core-data-migration ios swift
我正在NSPersistentStoreCoordinator从服务器创建一个新的后台长期节省。它工作正常,但突然我看到生产崩溃并出现以下错误 -
CRASH_INFO_ENTRY_0 致命错误:后台上下文创建失败,错误错误域=NSCocoaErrorDomain 代码=134110“持久存储迁移期间发生错误。” UserInfo={sourceURL=file:///var/mobile/Containers/Data/Application/8EF27C05-1755-49EE-B174-8B163CC7CC1D/Documents/App.sqlite,reason=无法就地迁移存储:尝试迁移期间违反约束,DESTINATIONURL =文件:///var/mobile/Containers/Data/Application/8EF27C05-1755-49EE-B174-8B163CC7CC1D/Documents/.App.sqlite.migrationdestination_41b5a6b5c6e848c462a8480cd24caef3,NSUnderlyingError = 0x170a56290 {错误域= NSCocoaErrorDomain代码= 134111“( null)" UserInfo={reason=在尝试迁移期间违反约束,NSUnderlyingException=违反约束,_NSCoreDataOptimisticLockingFailureConflictsKey=("")}}}:
看起来我有一个约束问题,因为这是我得到的错误 -
NSMigrationConstraintViolationError = 134111, // 由于违反唯一性约束,迁移失败
但是 _NSCoreDataOptimisticLockingFailureConflictsKey is <null>我无法追踪这个问题。
这是我的代码 -
lazy var backgroundSyncContext:NSManagedObjectContext = {
let psc = NSPersistentStoreCoordinator(managedObjectModel: NSManagedObjectModel.MR_defaultManagedObjectModel()!)
let context = NSManagedObjectContext(concurrencyType: NSManagedObjectContextConcurrencyType.PrivateQueueConcurrencyType)
context.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy
context.undoManager = nil
context.persistentStoreCoordinator = psc
let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true]
let paths = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask)
let applicationDocumentURL = paths.last!.absoluteString?.stringByReplacingOccurrencesOfString("%20", withString: " ")
let documentPath = paths.last!
let storeUrl = documentPath.URLByAppendingPathComponent("Prep4\(AppConfig.sharedInstance.examName).sqlite")
do {
try context.persistentStoreCoordinator?.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeUrl, options: mOptions)
print("Created background context")
} catch (let error){
fatalError("Background context creation failed with error \(error)")
}
return context
}()
Run Code Online (Sandbox Code Playgroud)
编辑
好的,我有一个猜测 - 是我向模型添加约束的最新版本。用户设备上的旧版本是否有可能包含对新约束无效的重复项,因此迁移失败。
这听起来合理吗?
谢谢沙妮