gpt4 book ai didi

ios - NSManagedObjectContext 删除后插入

转载 作者:行者123 更新时间:2023-11-30 13:18:32 25 4
gpt4 key购买 nike

我想在插入新数据之前清除 CoreData 实体中的所有数据。到目前为止,我尝试过删除所有内容,并且不允许我插入更新的数据,即使对这两个操作使用相同的上下文也是如此。有更好的方法吗?这是我一直在实现的代码。我所做的是从旧记录中删除实体,然后保存上下文。然后我在上下文中插入新对象,最后保存它。显然,保存后,当我从 View 中调用存储的数据时,它返回空。

class DS_Objectives {

let appDel:AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let dateFormatter = NSDateFormatter()

func storeObjectives(json: JSON) {

let context:NSManagedObjectContext = appDel.managedObjectContext
self.dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
self.dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")

let request : NSFetchRequest = NSFetchRequest.init(entityName: "EducationalObjective")

context.performBlock{
do{
let oldObjectives = try context.executeFetchRequest(request) as! [NSManagedObject]

for obj in oldObjectives {
context.deleteObject(obj)
}

try context.save()
} catch {
print(error)
}
}

for (_,subJson):(String, JSON) in json {

var obj : EducationalObjective? = self.findObjective(Int(subJson["IdObjetivoEducacional"].stringValue)!)

if obj == nil {
obj = NSEntityDescription.insertNewObjectForEntityForName("EducationalObjective",inManagedObjectContext: context) as? EducationalObjective
obj!.setValue(Int(subJson["IdObjetivoEducacional"].stringValue), forKey: "id")
}

obj!.setValue(Int(subJson["Numero"].stringValue), forKey: "numero")
obj!.setValue(Int(subJson["IdEspecialidad"].stringValue), forKey: "especialidad")
obj!.setValue(subJson["Descripcion"].stringValue, forKey: "descripcion")
obj!.setValue(subJson["CicloRegistro"].stringValue, forKey: "cicloRegistro")
obj!.setValue(subJson["Estado"].boolValue, forKey: "estado")
obj!.setValue(self.dateFormatter.dateFromString(subJson["updated_at"].stringValue), forKey: "updated_at")

for (_,res):(String,JSON) in json["students_results"] {

var edRes : StudentResult? = self.findStudentResult(Int(res["IdResultadoEstudiantil"].stringValue)!)

if edRes == nil {
edRes = NSEntityDescription.insertNewObjectForEntityForName("StudentResult",inManagedObjectContext: context) as? StudentResult
edRes!.setValue(Int(res["IdResultadoEstudiantil"].stringValue)!, forKey: "id")
}

edRes!.setValue(Int(res["IdResultadoEstudiantil"].stringValue), forKey: "id")
edRes!.setValue(res["Identificador"].stringValue, forKey: "identificador")
edRes!.setValue(res["Descripcion"].stringValue, forKey: "descripcion")
edRes!.setValue(res["CicloRegistro"].stringValue, forKey: "cicloRegistro")
edRes!.setValue(res["Estado"].boolValue, forKey: "estado")
edRes!.setValue(self.dateFormatter.dateFromString(res["updated_at"].stringValue)!, forKey: "updated_at")

}
}

do{ try context.save() } catch { print(error) }
}

最佳答案

context.performBlock 在托管对象上下文的队列上异步调度提供的 block 。由于您使用此方法来计划删除,然后同步执行插入(并且可能在错误的队列上),因此您将插入新对象,然后删除所有内容。

关于ios - NSManagedObjectContext 删除后插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38002734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com