2016-06-12 23 views
0

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.

+1

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

Antwort

0

Wie @vadian Notizen, ist Ihr Kernproblem, dass main ist völlig unabhängig von allem, was Sie auf dem Bildschirm. Sie erstellen einen Ansichtscontroller, ändern ihn und werfen ihn dann weg.

Ihr MainViewController sollte Kerndaten beachten und sich ändern, wenn sich die Daten ändern. Dadurch wird es wie erwartet aktualisiert.