我正在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
}
如果我关闭模拟器并再次运行,则今天花费的总时间将删除该对象,因此在关闭应用程序之前不得触发该对象。关于如何解决这个问题的任何建议?
答案 0 :(得分:1)
删除CoreData对象会从表中删除该行,如果再次提取,则不会获得表示该行的对象。
表示该行的现有对象不只是从它们所在的数组中删除它们。您必须侦听CoreData保存事件(或Notification Center,或直接删除它等)以响应正在发生的CoreData事件。 NSFetchedResultsController
会这样做,但如果todaysActivitiesArray
只是一个数组,那就不会。