【问题标题】:iOS: Deleting object from Core Data deletes it in table view but not in other parts of appiOS:从核心数据中删除对象会在表格视图中删除它,但不会在应用程序的其他部分中删除
【发布时间】:2016-06-11 20:32:24
【问题描述】:

我正在用 Swift 编写一个时间跟踪应用程序,但在删除某项活动所花费的时间时遇到了问题。我的删除功能在 2 个视图上将其从 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
}

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

【问题讨论】:

    标签: ios swift uitableview core-data nsdate


    【解决方案1】:

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

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

    【讨论】:

    • 我将如何实现这个?我尝试制作 todaysActivitiesArray = CoreDataHandler.sharedInstance.fetchCoreDataForTodayActivities() 但我不确定 NSFetchedResultsController 应该在哪里
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多