在我的viewController中,我有NSFetchedResultsController
来填充tableView
。在viewDidLoad()
我将当前时间保存到变量中,然后在NSFetchedResultsController's
didChange AnyObject
回调中将其打印出来:
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
}
}
我注意到,当我离开这个视图然后回来时,这个回调被调用两次,并且我第一次在视图中的日期被打印以及新的:
2017-05-14 18:29:42 +0000
2017-05-14 18: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 :(得分: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
。
答案 1 :(得分:0)
“离开视野”是什么意思 你回去了吗?如果你是,那么deinit就没有被召唤。
通过执行以下操作进行测试。
ImageButton button = (ImageButton) findViewById(R.id.button);
GradientDrawable backgroundGradient = (GradientDrawable) button.getBackground();
backgroundGradient.setStroke(5, Color.RED); // set stroke width and stroke color
如果您在返回时未调用此项,则表示存在保留周期问题。