[英]Clear All View Controllers On Logout
我注意到當用戶注銷時,所有以前的視圖控制器對象仍然存儲在內存中
注銷頁面中的當前代碼:
@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
}
}
Logout按鈕位於一個單獨的視圖控制器上,而不是我試圖從內存中清除的視圖控制器並從中刪除所有對象
您可以將app delegate的window.rootViewController屬性替換為您的登錄屬性(但您無法獲取動畫)
如果您的根視圖控制器是navigationController,那么首先調用performSegueWithIdentifier並在登錄視圖出現后在登錄視圖控制器的viewDidAppear函數中嘗試此操作。
此外,您還應確保在代碼中對先前的視圖控制器有任何強有力的引用。
navigationController?.viewControllers = [self]
我找到了這篇文章 。 雖然它是指單身人士,但它可能有所幫助:
我認為答案不在於破壞單例對象並重新創建它,而是要實際清除該單例對象中的實例變量。
您沒有顯示
[CSAppData inbox]
的聲明,但是如果它是一個NSMutableArray
,那么您可以清除它,並且對單例對象的任何現有引用都可以保留:+(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
函數替換了clearData
函數,而在那里使用了舊函數。
CSInbox
。 你可能會忽略這一點,但我不確定。 我認為這被一個帶有結構的類所取代
class CSInbox: NSObject {
var threads: [AnyObject]?
var newCount: Int?
var lastUpdate: NSDate?
func setThreadsFromJSON(json: [NSObject : AnyObject]) {
}
}
CSInboxViewController
被視圖控制器取代
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() {
}
}
我會根據需要繼續更新這個答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.