2016-08-15 130 views
2

嗨,我跟着http://commandshift.co.uk/blog/2013/06/06/multiple-persistent-stores-in-core-data/教程,並創建了多個核心數據配置。我的一些實體位於配置「SQLStorage」中,有些位於「InMemory」中。添加多個配置/永久存儲到核心數據swift

我希望SQLStorage配置可以利用NSSQLiteStoreType和InMemory配置來利用NSInMemoryStoreType。所以這裏是我如何修改我的persistentStoreCoordinator獲得者。

lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = { 
     // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail. 
     // Create the coordinator and store 
     let coordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel) 
     let url = self.applicationDocumentsDirectory.URLByAppendingPathComponent("SingleViewCoreData.sqlite") 
     var failureReason = "There was an error creating or loading the application's saved data." 
     do { 
      try coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: "SQLStorage", URL: url, options: nil) 
     } catch { 
      // Report any error we got. 
      var dict = [String: AnyObject]() 
      dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" 
      dict[NSLocalizedFailureReasonErrorKey] = failureReason 

      dict[NSUnderlyingErrorKey] = error as NSError 
      let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) 
      // Replace this with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)") 
      abort() 
     } 
     do { 
      try coordinator.addPersistentStoreWithType(NSInMemoryStoreType, configuration: "InMemory", URL: url, options: nil) 
     } catch { 
      // Report any error we got. 
      var dict = [String: AnyObject]() 
      dict[NSLocalizedDescriptionKey] = "Failed to initialize the application's saved data" 
      dict[NSLocalizedFailureReasonErrorKey] = failureReason 

      dict[NSUnderlyingErrorKey] = error as NSError 
      let wrappedError = NSError(domain: "YOUR_ERROR_DOMAIN", code: 9999, userInfo: dict) 
      // Replace this with code to handle the error appropriately. 
      // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
      NSLog("Unresolved error \(wrappedError), \(wrappedError.userInfo)") 
      abort() 
     } 

     return coordinator 
    }() 

加班我嘗試編譯這個代碼,我得到的錯誤:

CoreData: error: -addPersistentStoreWithType:InMemory configuration:InMemory URL:file:///Users/developer/Library/Developer/CoreSimulator/Devices/1D943405-C5AD-4CD4-9413-070DFC5334AB/data/Containers/Data/Application/2BEAF446-6F32-405B-B2B6-6B298D45E103/Documents/SingleViewCoreData.sqlite options:(null) ... returned error Error Domain=NSCocoaErrorDomain Code=134080 "(null)" UserInfo={NSUnderlyingException=Can't add the same store twice} with userInfo dictionary { NSUnderlyingException = "Can't add the same store twice"; }

2016-08-16 02:25:05.181 EncryptedCoredata[9457:461607] Unresolved error Error Domain=YOUR_ERROR_DOMAIN Code=9999 "Failed to initialize the application's saved data" UserInfo={NSLocalizedDescription=Failed to initialize the application's saved data, NSLocalizedFailureReason=There was an error creating or loading the application's saved data., NSUnderlyingError=0x7ff25a840ba0 {Error Domain=NSCocoaErrorDomain Code=134080 "(null)" UserInfo={NSUnderlyingException=Can't add the same store twice}}}, [NSLocalizedDescription: Failed to initialize the application's saved data, NSLocalizedFailureReason: There was an error creating or loading the application's saved data., NSUnderlyingError: Error Domain=NSCocoaErrorDomain Code=134080 "(null)" UserInfo={NSUnderlyingException=Can't add the same store twice}]

可能是什麼問題?任何幫助,將不勝感激。提前致謝。

+0

@湯姆哈靈頓:請看看這個問題:)我找到了你的答案在這裏類似的問題的問題:http://stackoverflow.com/questions/33483051/coredata-multiple-persistent-stores –

回答

1

即時錯誤是因爲您沒有更改2個塊之間的URL,因此您試圖在相同的路徑上添加2個不同的商店,而這是您無法做到的。

+0

謝謝你幫助,但有點困惑先生!我在同一個模型中有單核數據模型和多種配置。所以URL永遠是一樣的正確??我怎樣才能改變它們?你的意思是我應該爲每個配置創建一個不同的模型? –