ios – ViewControllers没有破坏

前端之家收集整理的这篇文章主要介绍了ios – ViewControllers没有破坏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的iOS应用程序存在严重问题.

我的应用程序中有登录逻辑.登录然后注销时,某些视图控制器不会破坏.这会导致一些问题,例如,我使用NSNotifcationCenter发出的一些事件会被发出几次.这些问题是可以避免的,但我真的想要一个解决方案,以避免一些视图控制器在后台保持打开状态而不控制它.

控制登录逻辑的方式如下:

在app delegate start函数中,如果用户已经登录,我将根视图控制器设置为主可用视图控制器.因此,我没有做任何事情,根视图控制器通过故事板设置为登录视图控制器导航控制器.

用户注销时,我使用模态segue将视图控制器转换回登录视图控制器导航控制器.

你可能已经理解我正在使用故事板,swift和最新的iOS.

我的注销代码是segue,它带我到LoginViewControler:

self.performSegueWithIdentifier("logout",sender: self)

我的app代理代码

if (userDefaults.valueForKey("uid") != nil) {
    let tabBarView = UIStoryboard(name: "Main",bundle: nil).instantiateViewControllerWithIdentifier("TabBarViewController") as! TabBarViewController
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    appDelegate.window?.rootViewController = tabBarView        
 }

我究竟做错了什么?

我很感激帮助:)

编辑

我甚至尝试在注销操作中设置根视图控制器,这也没有帮助.怎么可能呢?

这就是我现在注销的方式:

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let newRootViewController = self.storyboard?.instantiateViewControllerWithIdentifier("LoginNavigationController") as! UINavigationController          

appDelegate.window!.rootViewController = newRootViewController

解决方法

亚当H.是对的.如果这不起作用,那么检查具有强关系的IBOutlets和委托,并将它们更改为弱关系.即
@IBOutlet weak var collectionView: UICollectionView!

如果没有weak关键字,视图控制器将永远不会被处理掉.

根据项目的设置方式,如果您每次有人注销时使用导航控制器(我推荐),您都可以使用

dispatch_async(dispatch_get_main_queue()) {
    self.navigationController.popToRootViewControllerAnimated(true)
}

这将弹出导航堆栈中的所有内容,它将处理所有视图控制器(除非你有很强的关系,否则它们不会被丢弃)

猜你在找的iOS相关文章