Удаление объекта Core Data, но он все еще отображается в NSFetchedResultsController?
Я пишу приложение для отслеживания времени в Swift, и у меня возникла проблема с удалением времени, потраченного на занятие. Моя функция удаления скрывает его из 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
}
Если я закрываю симулятор и снова запускаю общее время, вычитается, как и ожидалось, поэтому удаление не должно запускаться, пока я не закрою его. Пожалуйста, помогите, я застрял на этом некоторое время сейчас.
1 ответ
Как отмечает @vadian, ваша основная проблема в том, что main
полностью независим от всего, что вы положили на экран. Вы создаете контроллер представления, модифицируете его, а затем выбрасываете его.
Ваш MainViewController
следует соблюдать основные данные и изменять себя при изменении данных. Это приведет к обновлению, как вы ожидаете.