iOS:从核心数据中删除对象会在 TableView 中删除它,但不会在应用程序的其他部分中删除

标签 ios swift uitableview core-data nsdate

我正在用 Swift 编写一个时间跟踪应用程序,但我在删除某项事件上花费的时间时遇到了问题。我的删除功能将它从 2 个 View 的 tableView 中隐藏起来,并且似乎将其从 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
}

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

最佳答案

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

表示该行的现有对象不只是将它们自己从它们所在的数组中删除。您必须监听 Co​​reData 保存事件(或通知中心,或直接删除它等)以响应正在发生的 CoreData 事情. NSFetchedResultsController 会这样做,但如果 todaysActivitiesArray 只是一个数组,它就不会。

关于iOS:从核心数据中删除对象会在 TableView 中删除它,但不会在应用程序的其他部分中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768268/

相关文章:

iOS 应用程序在设备上启动后连接调试器时卡住在空白屏幕上

ios - 传递和检索核心数据 - Swift 中的 NSArray 元素问题

ios - Base64Encoding 已弃用 : first deprecated in iOS 7. 0

ios - UITextField inputView - IBActions 未触发

ios - 如何在不跳转的情况下使用 CADisplayLink 和 UITableViewAutomaticDimension 在滚动时对 UITableView 执行更新?

ios - UITableViewCell 分隔符在 iOS7 中消失

ios - 使用 iFunbox > 用户文件系统删除 iOS 13.3 上的空相册

ios - Alamofire DownloadRequest 验证并从服务器获取响应数据

ios - UITableViewCell 用动画填充颜色

ios - 单击时更改单元格中的按钮颜色