簡體   English   中英

將核心數據數據庫導入新項目

[英]Importing Core Data database to new project

我正在將另一個項目中的應用程序從Objective-C重寫到Swift,但是導入核心數據數據庫時遇到問題(獲取請求返回空結果),該問題在以前的項目中由MagicalRecord處理。

這是我在做什么:

  1. 將數據庫模型文件復制到新項目。

  2. 在構建階段,將該模型文件添加到“編譯源和副本捆綁資源”中。

  3. 將實體代碼生成語言從objc更改為在模型文件內部快速轉換。

  4. 創建NSManagedObject子類

我檢查過的事情:

  • PersistentStore的URL與上一個項目中的URL相同(沙箱的應用程序標識符除外)。
  • 模型文件的名稱與上一個項目中的名稱相同。
  • 目標,方案,項目和捆綁包ID與先前的項目相同。
  • 整個核心數據堆棧(下面的代碼)的初始化工作沒有錯誤。

這是我初始化堆棧的方式(當然,由於已知原因我更改了這里的字符串,它們在項目中有效):

    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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM