2015-10-08 2 views
3

Я заметил, что, когда пользователь выходит из системы, все предыдущие объекты вид контроллера по-прежнему хранятся в памятиОчистить все View контроллеры На Выходе

текущий код на странице выхода из системы:

@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 
    } 
} 

кнопка Выход находится на отдельном контроллере представления, чем контроллеры зрения я пытаюсь очистить из памяти и удалить все объекты из

+0

, пожалуйста, укажите код с вашего контроллера. кажется, что у вас есть некоторые блоки/переменные, которые владеют вашим контроллером. – rkyr

+0

im не использует основные данные, однако я использую structs для хранения переменных. –

+0

Есть ли способ, которым я могу просто пропустить все контроллеры и выпустить их?Или есть лучший способ достичь моей цели? –

ответ

0

Я нашел this post. Несмотря на то, что в отношении одиночек, это может помочь:

Я думаю, что ответ заключается не в уничтожении одноплодного объекта и воссоздавать его, но на самом деле очистить переменный экземпляр в пределах этого одноплодного объекта.

Вы не показать декларацию [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 с правом один, против наличия старой функции там.

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() { 
    } 
} 

Я буду продолжать обновлять этот ответ по мере необходимости.

0

Вы можете заменить свойство window.rootViewController приложение делегата в качестве имущества входа (но вы не можете получить анимацию)

Если ваш контроллер представления корень navigationController то сначала вызовите performSegueWithIdentifier и после входа в систему зрения была попытка появилась это in viewDidAppear функция контроллера входа в систему.

И вы также должны убедиться, что в вашем коде есть какие-либо сильные ссылки на существующие контроллеры представлений.

 

    navigationController?.viewControllers = [self] 

+0

Тот же результат с кодом выше –

Смежные вопросы