Ich schreibe eine Zeiterfassung App in Swift, und ich habe ein Problem mit dem Löschen einer Zeit für eine Aktivität. Meine Löschen-Funktion verbirgt es aus TableView in 2 Ansichten und scheint, es aus Core Data zu entfernen, aber die Zeit löscht nicht von meiner Funktion "insgesamt verbrachte Stunden heute".Löschen von Core Data-Objekt, aber es zeigt sich immer noch in NSFetchedResultsController?
Code zum Löschen aus dem Verlauf. Dies funktioniert für Tableview in zwei verschiedenen View-Controller:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
let historyToDelete = fetchController.objectAtIndexPath(indexPath)
let todaysActivitiesArray = CoreDataHandler.sharedInstance.fetchCoreDataForTodayActivities()
let main = MainViewController()
var totalDuration = main.calculateTotalDurationForToday()
let historyDel = fetchController.objectAtIndexPath(indexPath) as! History
totalDuration = totalDuration - Int(historyDel.duration!)
CoreDataHandler.sharedInstance.deleteObject(historyToDelete as! NSManagedObject)
main.totalduration = totalDuration
}
}
-Code für heute Activity Array bekommen:
func fetchCoreDataForTodayActivities() -> [History] {
let fetchRequest = NSFetchRequest()
let entityDescription = NSEntityDescription.entityForName("History", inManagedObjectContext: self.backgroundManagedObjectContext)
fetchRequest.entity = entityDescription
let dateDescriptor = NSSortDescriptor(key: "startDate", ascending: false)
fetchRequest.sortDescriptors = [dateDescriptor]
let startDate = NSDate.dateByMovingToBeginningOfDay()
let endDate = NSDate.dateByMovingToEndOfDay()
let predicate = NSPredicate(format: "(startDate >= %@) AND (startDate <= %@)", startDate, endDate)
fetchRequest.predicate = predicate
return (fetchCoreDataWithFetchRequest(fetchRequest) as! [History])
}
-Code für die heutige Tätigkeit Berechnung:
func calculateTotalDurationForToday() -> NSInteger {
var sumOfDuration = 0
for history in todaysActivitiesArray {
sumOfDuration += (history.duration?.integerValue)!
}
return sumOfDuration
}
Wenn ich den Simulator zu schließen und wiederholen Sie die Gesamtzeit subtrahiert wie erwartet, so dass das Löschen nicht ausgelöst werden muss, bis ich es schließe. Bitte hilf mir, ich bin jetzt schon eine Weile dran.
Sie können den Kontext speichern, um das Löschen zu bestätigen, und 'main' ist eine brandneue Instanz von' MainViewController' und nicht die erwartete im Storyboard. – vadian