我有一個具有兩種配置的DataModel。一個用於預加載數據,另一個用於用戶數據。 首次啓動預加載SQLLite數據庫被複制到文檔文件夾。用戶數據數據庫由ApplicationSupport目錄中的核心數據創建。到目前爲止一切正常。但現在的問題是:如果是第一次啓動,即使調用saveContext()方法,也不會保存任何內容。所有用戶數據在下次應用開始時都消失了。但它不是第一個開始,一切正常,所有的用戶數據都在下一個應用程序開始。有沒有人知道問題是什麼?在這裏我的核心數據堆棧:核心數據在第一次啓動時將數據保存到錯誤的數據庫中
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "CoreData_App")
container.persistentStoreDescriptions[0].configuration = "PreloadData"
container.persistentStoreDescriptions[0].url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("PreloadData.sqlite")
let userStoreDescription = NSPersistentStoreDescription(url: FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!.appendingPathComponent("UserData.sqlite"))
userStoreDescription.configuration = "UserData"
container.persistentStoreDescriptions.append(userStoreDescription)
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext() {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
編輯 大量的測試後,我發現數據被存儲在第一次啓動預加載數據庫,並在第二次開始就正確的用戶資料庫。但我想在用戶數據庫的第一次啓動時保存數據。在這裏,我保存數據的代碼:
@IBAction func pressedFavoriteButton(_ sender: UIButton) {
if userRating == nil {
let rating = UserRating(context: DataController.sharedInstance.persistentContainer.viewContext)
rating.entryID = (entry?.id)!
userRating = rating
}
apiHandler.sendRequest(.POST) { (response, error) in
if let error = error {
print(error.localizedDescription)
return
}
DispatchQueue.main.async {
self.userRating?.isFavorite = !self.favoriteButton.isSelected
self.favoriteButton.isSelected = !self.favoriteButton.isSelected
DataController.sharedInstance.saveContext()
}
}
}
您必須正確初始化核心數據堆棧。請分享您的代碼。 – Adam
我不知道問題出在哪裏,所以很難知道我應該分享什麼。但是我現在已經將我的核心數據堆棧的代碼添加到問題中了。 – Lumpi01
您的項目中使用了哪個版本的Swift? – Mannopson