2017-05-14 5 views
0

私のviewControllerに私はtableViewを設定するためにNSFetchedResultsControllerを持っています。私はその後、NSFetchedResultsController'sdidChange AnyObjectコールバックでそれをプリントアウトし、変数に現在の時間を節約していますviewDidLoad()で:viewControllerが正しく削除されていませんか?

class MyViewController: UIViewController, NSFetchedResultsControllerDelegate { 
    var date: Date! 
    var fetchedResultsController: NSFetchedResultsController<Event>! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     date = Date() 
    } 

    func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) { 
     switch type { 
     case .insert: 
      feedTable.insertRows(at: [newIndexPath!], with: .fade) 
      print(date) 
     default: 
      break 
    } 
} 

私は、このビューを離れるときに、このコールバックが2回呼び出され戻ってきて、日付ことに気づきました私はビューにあった最初の時からのプリントだけでなく、新しいものされています

2017年5月14日夜06時29分42秒0000

2017年5月14日午後06時30分01秒+0000

私はこのような別々の機能でビューを残している:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let controller = storyboard.instantiateViewController(withIdentifier: "HomePage") as? HomeVC 
controller?.managedObjectContext = self.managedObjectContext 
self.present(controller!, animated: true, completion: nil) 

はなぜこのMyViewControllerは、私はそれを離れた後も固執して戻ってくるように見えるのでしょうか?私はそれを適切に除去しないままにしているのですか?

+0

'viewDidLoad'メソッドで' super'を呼び出すことを忘れないでください。 –

+0

私はちょうどこの質問にそれを含めていません – MarksCode

+0

質問を更新する必要があります。 :) –

答えて

2

私はこのような別々の機能でビューを残している:

let storyboard = UIStoryboard(name: "Main", bundle: nil) 
let controller = storyboard.instantiateViewController(withIdentifier: "HomePage") as? HomeVC 
controller?.managedObjectContext = self.managedObjectContext 
self.present(controller!, animated: true, completion: nil) 

うん、それが問題です。 の代わりにを既存のHomeVCに返すと、が新しい HomeVCになり、と表示されます。だからあなたはちょうどビューコントローラを積み上げています。

帰宅するために必要なことは、あなたがここに行ったことを解き放つことです。 presentの場合、今度はdismissです。 pushの場合は、今度はpopです。

+0

「MyViewController」を取得するために、HomeVCから同じ種類のストーリーボードインスタンスを使用しています。私が却下すれば私は帰宅するだろうと言っているのですか? – MarksCode

0

「ビューを離れる」とはどういう意味ですか? 戻っていますか?あなたがいるなら、deinitは呼ばれていません。

次の手順でテストします。

deinit { 
    print("VC Should deinitialize") 
} 

戻ったときに呼び出されない場合は、サイクルの問題が発生しています。

関連する問題