У меня есть медведь времени, получая мой NSUserDefaults
, чтобы сохранить, когда пользователь принимает лицензию. Я предполагаю, что я пропустил что-то простое, но, поскольку я смотрел на это в течение двух твердых дней, я, вероятно, не видел бы этого, если бы это укусило меня. Это мой первый проект, поэтому, пожалуйста, поймите, что я очень новичок в этом. Благодарим вас за терпение и помощь.NSUserDefaults не сохраняются
В главном VC функция работает от ViewDidLoad
, чтобы определить, принял ли пользователь лицензию.
override func viewDidLoad() {
super.viewDidLoad()
print("ViewController.swift View Did Load")
userLicense()
Вот эта функция:
func userLicense() {
if licenseStatus == nil {
print("nil status - The NSUserDefaults value for lisenceStatus is", licenseStatus)
segueIdentifier = "showEULA"
self.segue()
print("First Run or Not yet accepted or declined. License Status var = ",licenseStatus)
} else {
licenseStatus = NSUserDefaults.standardUserDefaults().objectForKey("licenseStatus")! as? String
print("userLicense func licenseStatus var is ",licenseStatus)
if licenseStatus == "Declined License" {
print("declined status - The NSUserDefaults value for lisenceStatus is", licenseStatus)
segueIdentifier = "showEULA"
segue()
print("Declined License. Send user back to EULA screen")
} else
if licenseStatus == "Accepted License" {
NSUserDefaults.standardUserDefaults().objectForKey("licenseStatus")
print("accepted status - The NSUserDefaults value for lisenceStatus is", licenseStatus,". The app should run.")
//segueIdentifier = "backToLoginScreen"
//segue()
//print("Accepted License")
}
}
}
Если пользователь не имеет лицензии, он segued к лицензии Прием VC и этот код работает:
Существует кнопка, чтобы принять Лицензия:
@IBAction func acceptEULA(sender: AnyObject) {
NSUserDefaults.standardUserDefaults().setObject("Accepted License", forKey: "licenseStatus")
licenseStatus = NSUserDefaults.standardUserDefaults().objectForKey("licenseStatus")! as! String
print("The Accepted func NSUserDefaults license Status is ", licenseStatus)
segueIdentifier = "backToLoginScreen"
self.passThroughError = "You have chosen to accept the user license. Click cancel to return, otherwise enjoy using MORE 2 Go."
self.passThroughErrorAlertController("Confirm Accept License", error: passThroughError)
}
И кнопка Отклонить лицензию:
@IBAction func cancelApp(sender: AnyObject) {
NSUserDefaults.standardUserDefaults().setObject("Declined License", forKey: "licenseStatus")
licenseStatus = (NSUserDefaults.standardUserDefaults().objectForKey("licenseStatus")! as? String)!
print("The NSUserDefaults licenseStatus is ", self.licenseStatus)
segueIdentifier = "backToLoginScreen"
self.passThroughError = "You have chosen to decine the user license. Click cancel to return, otherwise click OK and the app will be inactive."
self.passThroughErrorAlertController("Confirm Decline License", error: passThroughError)
}
Как вы видите, в этой кнопке IBActions
что я установить licenseStatus var
соответствующее значение. Команды print
показывают в журналах, что значения установлены правильно, но когда пользователь возвращается обратно в VC входа, значение не застревает. Вот функция, где продолжение на самом деле называется, в случае, если это где я пропускаю шаг:
func passThroughErrorAlertController(title:String, error:String) {
let passThroughAlert = UIAlertController(title: title, message: passThroughError, preferredStyle: UIAlertControllerStyle.Alert)
passThroughAlert.addAction((UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)))
passThroughAlert.addAction((UIAlertAction(title: "OK", style: .Default, handler: {action in
print("The user clisked OK, the license status is ", self.licenseStatus)
self.performSegueWithIdentifier(self.segueIdentifier, sender: self)
//self.dismissViewControllerAnimated(true, completion: nil)
})))
self.presentViewController(passThroughAlert, animated: true, completion: nil)
}
Я извиняюсь за столь длительный пост, но как я уже сказал, я пытался осуществить это в течение двух дней, и ни одна из ссылок, которые я могу найти, по-видимому, не помогает (или я просто пропускаю forrest для деревьев сейчас, когда я так далеко). Еще раз спасибо за вашу помощь.
Запишите вопрос в Google. Некоторые из первых хитов указывают на дубликаты. –
Вы пытались добавить 'NSUserDefaults.standardUserDefaults(). Synchronize()' после того, как setObject в NSUserDefault? –
У вас есть отладчик. Отлаживать! Шаг через код по одной строке за раз, исследуя переменные и путь исполнения, и посмотрите, что на самом деле происходит. – matt