我正在Swift中编写一个时间跟踪应用程序,我在删除活动所花费的时间方面遇到了问题。我的删除功能会在2个视图中将其从tableView中隐藏,并且似乎将其从核心数据中删除,但时间不会从我的“今天花费的总时数”功能中删除。
从历史记录中删除的代码。这适用于两个不同视图控制器中的tableView:
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
let historyToDelete = fetchController.objectAtIndexPath(indexPath)
let todaysActivitiesArray = CoreDataHandler.sharedInstance.fetchCoreDataForTodayActivities()
let main = MainViewController()
var totalDuration = main.calculateTotalDurationForToday()
let historyDel = fetchController.objectAtIndexPath(indexPath) as! History
totalDuration = totalDuration - Int(historyDel.duration!)
CoreDataHandler.sharedInstance.deleteObject(historyToDelete as! NSManagedObject)
main.totalduration = totalDuration
}
}
获取今天活动数组的代码:
func fetchCoreDataForTodayActivities() -> [History] {
let fetchRequest = NSFetchRequest()
let entityDescription = NSEntityDescription.entityForName("History", inManagedObjectContext: self.backgroundManagedObjectContext)
fetchRequest.entity = entityDescription
let dateDescriptor = NSSortDescriptor(key: "startDate", ascending: false)
fetchRequest.sortDescriptors = [dateDescriptor]
let startDate = NSDate.dateByMovingToBeginningOfDay()
let endDate = NSDate.dateByMovingToEndOfDay()
let predicate = NSPredicate(format: "(startDate >= %@) AND (startDate <= %@)", startDate, endDate)
fetchRequest.predicate = predicate
return (fetchCoreDataWithFetchRequest(fetchRequest) as! [History])
}
计算今天活动的代码:
func calculateTotalDurationForToday() -> NSInteger {
var sumOfDuration = 0
for history in todaysActivitiesArray {
sumOfDuration += (history.duration?.integerValue)!
}
return sumOfDuration
}
如果我关闭模拟器并再次运行,则总时间会按预期减去,因此在关闭之前不得触发删除。请帮忙,我现在已经坚持了一段时间。
答案 0 :(得分:0)
正如@vadian所说,你的核心问题是main
完全独立于你在屏幕上放置的任何内容。您可以创建一个视图控制器,对其进行修改,然后将其丢弃。
您的MainViewController
应该观察核心数据,并在数据发生变化时自行修改。这将导致它按预期更新。