我正在用 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 对象会从表中删除该行,如果您再次获取,您将不会获得表示该行的对象。
表示该行的现有对象不只是将它们自己从它们所在的数组中删除。您必须监听 CoreData 保存事件(或通知中心,或直接删除它等)以响应正在发生的 CoreData 事情. NSFetchedResultsController
会这样做,但如果 todaysActivitiesArray
只是一个数组,它就不会。
关于iOS:从核心数据中删除对象会在 TableView 中删除它,但不会在应用程序的其他部分中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768268/