gpt4 book ai didi

ios - 注销时清除所有 View Controller

转载 作者:可可西里 更新时间:2023-10-31 23:44:30 26 4
gpt4 key购买 nike

我注意到当用户注销时,所有以前的 View Controller 对象仍存储在内存中

注销页面中的当前代码:

 @IBAction func LogOutClicked(sender: AnyObject)
{
let appDomain = NSBundle.mainBundle().bundleIdentifier
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain!)
self.performSegueWithIdentifier("goto_loginpage", sender: self)

}

首页当前代码:

override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated);


MyVariables.prefs = NSUserDefaults.standardUserDefaults()
let isLoggedIn:Int = MyVariables.prefs.integerForKey("ISLOGGEDIN") as Int

//not logged in
if (isLoggedIn != 1)
{
self.performSegueWithIdentifier("goto_login", sender: self)
}
//logged in
else
{
// Start Filling objects with data
}
}

注销按钮位于与我试图从内存中清除并从中删除所有对象的 View Controller 不同的 View Controller 上

最佳答案

我找到了 this post .虽然它是针对单例的,但它可能会有所帮助:

I think the answer lies not in destroying the singleton object and recreating it, but to actually clear the instance variables within that singleton object.

You don't show the declaration of [CSAppData inbox], but if it's an NSMutableArray, for example, then you can clear that, and any existing references to the singleton object can remain:

+(void) clearData {
CSAppData *appData = [CSAppData appData];
[appData.inbox removeAllObjects];
}

可能必须阅读问题才能获得代码的一些上下文,但这种变体可能有效:

func init() -> AnyObject {
self = super()
if self {
self.inbox = CSInbox()
}
return self
}

class func appData() -> CSAppData {
static var appDataInstance: CSAppData
if !appDataInstance {
appDataInstance = CSAppData()
}

return appDataInstance
}

class func clearData() {
var appData: CSAppData = CSAppData.appData()
appData.inbox.removeAllObjects()
}

我用正确的函数替换了 clearData 函数,而不是在其中保留旧函数。

CSInbox。您也许可以忽略这一点,但我不确定。我认为这被替换为一个包含您的结构的类

class CSInbox: NSObject {
var threads: [AnyObject]?

var newCount: Int?

var lastUpdate: NSDate?

func setThreadsFromJSON(json: [NSObject : AnyObject]) {
}
}

CSInboxViewController 替换为您的 View Controller

class CSInboxViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate, CSThreadViewControllerDelegate {
@IBOutlet var inboxTableView: UITableView!

var inbox: CSInbox? // <=== This is replaced with variables containing your class(es)
}

这是 CSAppData 类:

class CSAppData: NSObject {
var inbox: CSInbox? // <=== This is replaced with variables containing your class(es)

class func appData() -> CSAppData {
}

class func clearData() {
}
}

我会根据需要继续更新这个答案。

关于ios - 注销时清除所有 View Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33014694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com