swift - Retrieving textFields data using userdefaults
问题描述
import UIKit
class ViewController: UIViewController { var data : [String] = [""]
@IBOutlet weak var firstName : TweeActiveTextField!
@IBOutlet weak var lastName : TweeActiveTextField!
@IBOutlet weak var dateOfBirth : TweeActiveTextField!
@IBOutlet weak var EMail : TweeActiveTextField!
@IBOutlet weak var mobileNumber : TweeActiveTextField!
@IBOutlet weak var saveButton : UIButton!
@IBAction func saveAction(_ sender: UIButton)
{
let alert = UIAlertController(title:"Sucessfully Saved", message:"Your Details Are Saved", preferredStyle: UIAlertController.Style.alert)
var OKAction = UIAlertAction(title: "ok", style: UIAlertAction.Style.default)
{
(OKAction) in
print("Ok Button Pressed")
}
present(alert,animated: true,completion: nil)
alert.addAction(OKAction)
var name = "\(firstName.text!)" + "\(lastName.text!)"
button = UIButton()
button.frame = CGRect(x: 210, y: yPosition, width: 150, height: 50)
button.setTitle(name, for: UIControl.State.normal)
button.backgroundColor = .cyan
button.setTitleColor(.black, for: UIControl.State.normal)
button.addTarget(self, action: #selector(mainAction), for: UIControl.Event.touchUpInside)
textView.addSubview(button)
yPosition += 70
}
@objc func mainAction()
{
let defaults = UserDefaults.standard
data += ["\(firstName.text!) = \(firstName.text!)",
"\(lastName.text!) = \(lastName.text!)",
"\(EMail.text!) = \(EMail.text!)",
"\(dateOfBirth.text!) = \(dateOfBirth.text!)",
"\(mobileNumber.text!) = \(mobileNumber.text!)"]
defaults.set(data, forKey: "savedData")
// defaults.removeObject(forKey:"savedData")
print(data)
}
override func viewDidAppear(_: Bool)
{
let defaults = UserDefaults.standard
data = defaults.object(forKey: "savedData") as! [String]
print(data)
}
super.viewDidLoad()
// Do any additional setup after loading the view.
}
} i edited the code please check it out.in viewDidApper Function..i got thread .... Fatal error: Unexpectedly found nil while unwrapping an Optional value: file /Users/madhu/Downloads/SegmentNAlertTask/SegmentNAlertTask/ViewController.swift, line 139
解决方案
您正在崩溃,因为您正在nil
从 UserDefaults 中检索一个值,或者因为有些东西不是 a[String]
或不能被类型转换为 a [String]
。
在这段代码中:
data = defaults.object(forKey: "savedData") as! [String]
你正在检索一个Any?
对象。
也就是说,一个Optional
可以持有或不持有值的对象。
另外,它是一个几乎可以是任何类的对象。
然后你强迫它变成一个[String]
,如果它不是一个[String]
对象,它显然会崩溃。
你应该用这个替换那行代码:
data = defaults.object(forKey: "savedData") as? [String]
这样,您将安全地解开检索到的对象并尝试将其类型转换为[String]
. 如果它失败了,您data
将不会nil
使应用程序崩溃。
如果类型转换失败,您还可以提供默认值,如下所示:
data = defaults.object(forKey: "savedData") as? [String] ?? []
如果类型转换失败,您将获得一个空数组[String]
。
TL;DR:我建议你研究Optionals
一下以及如何与他们合作。
推荐阅读
- python - jupyter notebook 中包的输出列表
- flutter - Flutter Dio 将 MultipartFile 对象动态添加到 Map
- javascript - 如何使用长度和宽度Javascript返回矩形的面积
- kotlin - 使用内联函数 kotlin
- r - 如何对列表中具有相同名称的数据框求和?
- python - Python Pandas 中 DataFrame 中的多索引难以聚合?
- swift - CoreLocation 查看 requestAlwaysAuthorization() 是否触发了弹出窗口
- javascript - 在循环中进行一定数量的 ajax 调用后出错
- reporting-services - 升级到 SendGrid API 密钥后,SSRS(SQL Server 报告服务)订阅邮件未从数据库(报告服务器)发送
- php - 如何制作