Удаление объекта Core Data, но он все еще отображается в NSFetchedResultsController?

Я пишу приложение для отслеживания времени в Swift, и у меня возникла проблема с удалением времени, потраченного на занятие. Моя функция удаления скрывает его из tableView в двух представлениях и, по-видимому, удаляет его из базовых данных, но время не удаляется из моей функции "общее количество часов, потраченных сегодня".

Код для удаления из истории. Это работает для tableView в двух разных контроллерах представления:

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

        }
}

Код для получения сегодня массива активности:

 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])
}

Код для расчета сегодняшней активности:

func calculateTotalDurationForToday() -> NSInteger {
    var sumOfDuration = 0
    for history in todaysActivitiesArray {
        sumOfDuration += (history.duration?.integerValue)!
    }
    return sumOfDuration
}

Если я закрываю симулятор и снова запускаю общее время, вычитается, как и ожидалось, поэтому удаление не должно запускаться, пока я не закрою его. Пожалуйста, помогите, я застрял на этом некоторое время сейчас.

1 ответ

Как отмечает @vadian, ваша основная проблема в том, что main полностью независим от всего, что вы положили на экран. Вы создаете контроллер представления, модифицируете его, а затем выбрасываете его.

Ваш MainViewController следует соблюдать основные данные и изменять себя при изменении данных. Это приведет к обновлению, как вы ожидаете.

Другие вопросы по тегам