Я работаю над приложением iOS (Swift), которое использует основные данные. В этом приложении я использую объект с именем Audit
и после завершения аудита я обновил логическое свойство active
этого объекта до false
. Ниже приведен метод сохранения объекта аудита. Я использовал один и тот же метод для создания и обновления дел.
class func saveAudit(audit:AuditModel){
let curntAudit = Utilities.auditDetails(auditId: Int(audit.auditId))
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return }
let managedContext = appDelegate.persistentContainer.viewContext
if curntAudit != nil {
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "AuditModel")
fetchRequest.predicate = NSPredicate(format: "auditId == %i", curntAudit!.auditId)
fetchRequest.returnsObjectsAsFaults = false
do {
let results = try managedContext.fetch(fetchRequest) as? [AuditModel]
if results!.count > 0 {
var auditModl = results?.first
auditModl!.date = audit.date
auditModl!.active = audit.active
auditModl!.critical = audit.critical
auditModl!.isNew = audit.isNew
auditModl!.pDepartments = audit.pDepartments
auditModl!.pImages = audit.pImages
auditModl!.sended = audit.sended
auditModl!.showNa = audit.showNa
auditModl!.abbreveation = audit.abbreveation
auditModl!.languages = audit.languages
auditModl!.templateId = audit.templateId
auditModl!.title = audit.title
auditModl!.conclusions = audit.conclusions
auditModl!.positiveAspects = audit.positiveAspects
auditModl!.idControl = audit.idControl
auditModl!.idDashboard = audit.idDashboard
auditModl!.locationId = audit.locationId
auditModl!.styleId = audit.styleId
auditModl!.totalComments = audit.styleId
auditModl!.totalImages = audit.styleId
auditModl!.totalQuestions = audit.styleId
auditModl!.majorAspects = audit.majorAspects
}
} catch {
print("failed")
}
} else {
let auditEntity = NSEntityDescription.entity(forEntityName: "AuditModel", in: managedContext)
let auditModl = NSManagedObject(entity: auditEntity!, insertInto: managedContext)
auditModl.setValue(audit.date, forKey: "date")
auditModl.setValue(audit.active, forKey: "active")
auditModl.setValue(audit.critical, forKey: "critical")
auditModl.setValue(audit.isNew, forKey: "isNew")
auditModl.setValue(audit.pDepartments, forKey: "pDepartments")
auditModl.setValue(audit.pImages, forKey: "pImages")
auditModl.setValue(audit.sended, forKey: "sended")
auditModl.setValue(audit.showNa, forKey: "showNa")
auditModl.setValue(audit.abbreveation, forKey: "abbreveation")
auditModl.setValue(audit.languages, forKey: "languages")
auditModl.setValue(audit.templateId, forKey: "templateId")
auditModl.setValue(audit.title, forKey: "title")
auditModl.setValue(audit.conclusions, forKey: "conclusions")
auditModl.setValue(audit.auditId, forKey: "auditId")
auditModl.setValue(audit.positiveAspects, forKey: "positiveAspects")
auditModl.setValue(audit.idControl, forKey: "idControl")
auditModl.setValue(audit.idDashboard, forKey: "idDashboard")
auditModl.setValue(audit.locationId, forKey: "locationId")
auditModl.setValue(audit.styleId, forKey: "styleId")
auditModl.setValue(audit.totalComments, forKey: "totalComments")
auditModl.setValue(audit.totalImages, forKey: "totalImages")
auditModl.setValue(audit.totalQuestions, forKey: "totalQuestions")
auditModl.setValue(audit.majorAspects, forKey: "majorAspects")
}
do {
try managedContext.save()
} catch let error as NSError {
print("Couldn't save. \(error), \(error.userInfo)")
}
}
Сразу после обновления флага active
пользователь перенаправит на отдельный экран, и на этом экране будет показан список всех объектов аудита, который active == false
. Ниже приведен метод получения данных.
class func finishedAudits() -> [AuditModel]? {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return nil}
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "AuditModel")
fetchRequest.predicate = NSPredicate(format: "active == NO")
fetchRequest.returnsObjectsAsFaults = false
do {
let results = try managedContext.fetch(fetchRequest)
return results as! [AuditModel]
} catch {
print("failed")
return nil
}
}
Проблема в том, что недавно обновленный объект не был получен вышеуказанным способом. Как только я перезапущу приложение, только вышеупомянутый метод показывает недавно обновленный объект. Я пытался исправить это по-разному, но ни один из них не работал. Кто-нибудь знает, что здесь не так? создание managedContext
объекта в каждом методе вызывает эту проблему?
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return }
let managedContext = appDelegate.persistentContainer.viewContext
Может кто-нибудь помочь мне с этим? Я застрял с этим несколько дней. Спасибо заранее.