![](/img/trans.png)
[英]NSInternalInconsistencyException when saving Core Data on Background Context
[英]Swift : Error when saving to core data context
我的應用程序包含兩個由標簽欄控制器管理的視圖。
第一個視圖包含一個按鈕,該按鈕可從服務器下載數據並將其解析為對象。 完成之后,我將基於這些對象創建核心數據實體。 只要按下按鈕,就會刪除以前的實體,以避免添加相同的數據
第二個視圖包含可用於顯示檢索到的核心數據實體數據的表格視圖。
這是我保存數據的方法:
func saveData()
{
var context:NSManagedObjectContext = self.managedObjectContext!
var error: NSError?
let entityDescription =
NSEntityDescription.entityForName("Medicine",
inManagedObjectContext: managedObjectContext!)
for element in self.loadedArray {
var medicine = Medicine(entity: entityDescription!,
insertIntoManagedObjectContext: managedObjectContext)
medicine.name = element.name
medicine.desc = element.desc
var error: NSError?
context.save(&error)
println(medicine)
}
}
這就是我刪除數據的方式
func deleteData() {
let fetchRequest = NSFetchRequest(entityName: "Medicine")
let fetchedEntities = self.managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as! [Medicine]
for entity in fetchedEntities {
self.managedObjectContext!.deleteObject(entity)
}
self.managedObjectContext!.save(nil)
}
一旦從下載數據中獲取了好好加載的數組,我就保存數據
var loadedArray:[Drug] = [] {
didSet {
self.saveData()
}
}
行為是不確定的,但通常在我保存數據時出錯,然后進入表視圖,然后返回以刪除/保存新數據。 這是崩潰發生的時間,這是錯誤:
我知道這個錯誤相對難以重現,因此,我認為最好的方法是提供一個指向項目https://github.com/thedc89/MedApp的鏈接(查看最新提交)
提前致謝
編輯:
這是在第二個視圖中獲取的結果控制器:
lazy var fetchedResultsController: NSFetchedResultsController = {
let medicinesFetchRequest = NSFetchRequest(entityName: "Medicine")
let primarySortDescriptor = NSSortDescriptor(key: "name.order", ascending: true)
medicinesFetchRequest.sortDescriptors = [primarySortDescriptor]
let frc = NSFetchedResultsController(
fetchRequest: medicinesFetchRequest,
managedObjectContext: self.managedObjectContext!,
sectionNameKeyPath: "name",
cacheName: nil)
frc.delegate = self
return frc
}()
此外,由於某種原因,github項目上似乎缺少數據模型,這確實很奇怪。 但是,如果實際上缺少它,我認為它不會保存任何數據,但是它是我第一次觸摸按鈕時發生的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.