2016-06-11 14 views
1

Swiftに時間トラッキングアプリを作成していますが、アクティビティに費やした時間を削除する際に問題があります。私の削除機能は、2つのビューでtableViewから隠して、コアデータから削除するように見えますが、時間は私の「今日の総時間」機能から削除されません。履歴から削除するためのiOS: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に削除するため:1日の合計時間を計算するための

func deleteObject(object: NSManagedObject) { 
backgroundManagedObjectContext.deleteObject(object) 
saveContext() 
} 

機能:

func calculateTotalDurationForToday() -> NSInteger { 
    var sumOfDuration = 0 
    for history in todaysActivitiesArray { 
     sumOfDuration += (history.duration?.integerValue)! 
    } 
    return sumOfDuration 
} 

私はシミュレータを閉じた場合もう一度実行すると、今日の合計時間がオブジェクトを削除するので、閉じるまでトリガする必要はありません アプリ。これを修正する方法に関するアドバイスはありますか?

答えて

1

CoreDataオブジェクトを削除するとテーブルから行が削除され、再度フェッチした場合はその行を表すオブジェクトは取得されません。

その行を表す既存のオブジェクトは、自分が配置されている配列から自分自身を削除するだけではありません。CoreDataのイベント(またはNotification Centerを直接削除するなど)を聞いて、ハプニング。 NSFetchedResultsControllerその場合でも、todaysActivitiesArrayが単なる配列であれば、そうではありません。

+0

どうすれば実装できますか?私はtodaysActivitiesArray = CoreDataHandler.sharedInstance.fetchCoreDataForTodayActivities()を作成しようとしましたが、NSFetchedResultsControllerがどこにあるべきか正確にはわかりません – Sammy

関連する問題