![](/img/trans.png)
[英]Copy core data file model from Objective-C app to brand new Swift 3 project
[英]Importing Core Data database to new project
我正在將另一個項目中的應用程序從Objective-C重寫到Swift,但是導入核心數據數據庫時遇到問題(獲取請求返回空結果),該問題在以前的項目中由MagicalRecord處理。
這是我在做什么:
將數據庫模型文件復制到新項目。
在構建階段,將該模型文件添加到“編譯源和副本捆綁資源”中。
將實體代碼生成語言從objc更改為在模型文件內部快速轉換。
創建NSManagedObject子類
我檢查過的事情:
這是我初始化堆棧的方式(當然,由於已知原因我更改了這里的字符串,它們在項目中有效):
lazy var applicationDocumentsDirectory: URL = {
let urls = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)
var applicationDocumentsDirectoryRaw = urls[urls.count-1]
applicationDocumentsDirectoryRaw.appendPathComponent("App_Name", isDirectory: true)
return applicationDocumentsDirectoryRaw
}()
lazy var managedObjectModel: NSManagedObjectModel = {
let modelURL = Bundle.main.url(forResource: "Model_Name", withExtension: "momd")!
return NSManagedObjectModel.init(contentsOf: modelURL)!
}()
lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = {
let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
let url = self.applicationDocumentsDirectory.appendingPathComponent("CoreDataStore.sqlite")
var failureReason = "There was an error creating or loading the application's saved data."
do {
try coordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: [NSMigratePersistentStoresAutomaticallyOption: true])
} catch {
var dict = [String: AnyObject]()
dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" as AnyObject?
dict[NSLocalizedFailureReasonErrorKey] = failureReason as AnyObject?
dict[NSUnderlyingErrorKey] = error as NSError
let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict)
NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)")
abort()
}
return coordinator
}()
lazy var managedObjectContext: NSManagedObjectContext = {
let coordinator = self.persistentStoreCoordinator
var managedObjectContext = NSManagedObjectContext(concurrencyType: .mainQueueConcurrencyType)
managedObjectContext.persistentStoreCoordinator = coordinator
return managedObjectContext
}()
PersistentStore的URL 沒有被當前和以前的項目相同。
我以為是,但不是。 MagicalRecord的方法之一NSPersistentStore.MR_defaultLocalStoreUrl
返回了無效的NSURL。
對於子孫后代-通過Xcode設備管理器下載應用程序的IPA,並手動找到其URL!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.