iOS:从Core Data中删除对象会在表视图中删除它,但不会在应用程序的其他部分删除它

时间:2016-06-11 20:32:24

标签: ios swift uitableview core-data nsdate

我正在Swift中编写一个时间跟踪应用程序,我在删除活动所花费的时间方面遇到了问题。我的删除功能将它从tableView隐藏在2个视图上,并且似乎将其从Core Data中删除,但是时间不会从我的"今天花费的总时间中删除"功能。

从历史记录中删除的代码:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: 
UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        let historyToDelete = fetchController.objectAtIndexPath(indexPath)
        let main = MainViewController()
        var totalDuration = main.totalduration
        let historyDel = fetchController.objectAtIndexPath(indexPath) as! History
        totalDuration = totalDuration - Int(historyDel.duration!)
        CoreDataHandler.sharedInstance.deleteObject(historyToDelete as! NSManagedObject)
    }
}

CoreDataHandler中的删除代码:

func deleteObject(object: NSManagedObject) {
backgroundManagedObjectContext.deleteObject(object)
saveContext()
}

计算总持续时间的函数:

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

如果我关闭模拟器并再次运行,则今天花费的总时间将删除该对象,因此在关闭应用程序之前不得触发该对象。关于如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分:1)

删除CoreData对象会从表中删除该行,如果再次提取,则不会获得表示该行的对象。

表示该行的现有对象不只是从它们所在的数组中删除它们。您必须侦听CoreData保存事件(或Notification Center,或直接删除它等)以响应正在发生的CoreData事件。 NSFetchedResultsController会这样做,但如果todaysActivitiesArray只是一个数组,那就不会。