删除Core Data对象但它仍然显示在NSFetchedResultsController中?

时间:2016-06-12 16:49:30

标签: ios swift uitableview core-data nsfetchedresultscontroller

我正在Swift中编写一个时间跟踪应用程序,我在删除活动所花费的时间方面遇到了问题。我的删除功能会在2个视图中将其从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 个答案:

答案 0 :(得分:0)

正如@vadian所说,你的核心问题是main完全独立于你在屏幕上放置的任何内容。您可以创建一个视图控制器,对其进行修改,然后将其丢弃。

您的MainViewController应该观察核心数据,并在数据发生变化时自行修改。这将导致它按预期更新。