Почему CoreData работает только несколько раз?

coredata

#1

Сохраненная в CoreData информация работает 2-3 раза, а потом пропадает почему-то.
Даже не могу толком понять закономерность.

В этом окне я создаю пароль, сохраняю его в CoreData и перехожу на другое окно.

В этом окне я достаю пароль из CoreData и сравниваю его с введенным паролем, и если он совпадет, то перехожу еще на следующее окно.

Логика программы в том, что когда я 1 раз создал пароль , то при загрузке первого окна “Создания Пароля” идет проверка на существование пароля как такового, и если он есть , то сразу открывается окно “Ввода Пароля”.

И проблема заключается в том, что приложение первый раз работает, а после 2-3 раз уже нет.

Как жто происходит:
я создал пароль, зашел в программу.
я выгрузил программу из памяти и зашел и все работает
сделал это в третий раз и оно опять кидает меня на 1 окно создания пароля…

Вот файл программы : ( там 2 файла RegPasswordVC и PasswordVC )
https://drive.google.com/open?id=1pvOA8qvtrObXREuTMnudiJnu1pGt_BTK


#2

Каждый раз при инициализации RegPasswordVC создаётся новая сущность Password с пустым полем password, когда вы делаете запрос (fetch) эта сущность приходит в нём, по этому в viewDidAppear у вас per2 == nil

Просто создавайте сущность при сохранении пароля и всё будет работать как надо:


#3

Спасибо большое, все заработало!)

Хотел еще спросить.
Что посоветуете сделать, чтобы при входе в приложение с существующим пароля не было видно как меняется окно “Создания пароля” на окно “Ввода пароля”?


#4

В смысле не было видно? Не видно поле ввода или вводимого пароля?

Если хотите скрыть символы вот так

То к свойствах текстфилд просто поставьте галку


#5

Вы неправильно поняли

У меня первым загружается ViewController ответственный за создания пароля.
Но когда я уже создал пароль, то в нем происходит проверка и он сразу перекидывает меня на 2рой ViewController, ответственный за ввод пароля.

Так вот при входе я всегда вижу, как сначала загружается 1-вый ViewController, а потом сразу 2-рой.


#6

Сделайте роутер с проверкой существования авторизованного пользователя. И пусть он заботится о том, какой контроллер отдавать при нахождение/отсутствии авторизации

Вот простой пример, перепишите для своих нужд:

  var window: UIWindow?
  
  internal func route() {
    self.window = UIWindow(frame: UIScreen.main.bounds)
    self.window!.backgroundColor    = UIColor.white
    let navigationVC = TSNavigationController(rootViewController: controller())
    self.window!.rootViewController = navigationVC
    self.window!.makeKeyAndVisible()
  }

  fileprivate func controller() -> UIViewController {
    var vc: UIViewController?
    switch UIDevice.current.userInterfaceIdiom {
      case .phone: vc = LoadAnimationViewController()
      case .pad: vc = UIStoryboard(name: "iPad", bundle: nil).instantiateInitialViewController()
      default: break
    }
    return vc!
  }

Здесь пример разных бордов/контроллеров в зависимости от того, на айпаде или айфоне запущено приложение. Но понять можно


#7

Спасибо, буду пробовать)