所以我无法在 USERDEFAULTS 上保存我的文本字段。我设法在我的联系人上使用了这个方法(你可以在下面看到我的代码),当我尝试在我的文本字段上保存/加载时不起作用。你能给我任何建议吗?谢谢
PBProfile.Swift
class PBProfile {
var firstName: String = ""
var lastName: String = ""
var contacts = [String]()
func loadFromDefaults() {
let defaults = UserDefaults.standard
firstName = defaults.string(forKey: "firstName") ?? ""
lastName = defaults.string(forKey: "lastName") ?? ""
contacts = defaults.stringArray(forKey: "contacts") ?? [String]()
}
func saveToDefaults() {
let defaults = UserDefaults.standard
defaults.set(firstName, forKey: "firstName")
defaults.set(lastName, forKey: "lastName")
defaults.set(contacts, forKey: "contacts")
defaults.synchronize()
}
}
应用委托
var profile: PBProfile!
var location: PBLocation!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FIRApp.configure()
profile = PBProfile()
profile.loadFromDefaults()
profile.saveToDefaults()
location = PBLocation()
return true
}
}
设置.swift
import Foundation
import ContactsUI
import Contacts
class Settings: UIViewController, CNContactPickerDelegate, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource {
//VARIABLES
var saveButtonSelected: UIButton!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var firstName: UITextField!
@IBOutlet weak var lastName: UITextField!
//--- End of Variables --
// -- ViewDidLoad --
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated: false)
self.hideKeyboardWhenTappedAround()
firstName.delegate = self
lastName.delegate = self
tableView.reloadData()
firstName.text = app.profile.firstName
lastName.text = app.profile.lastName
app.profile.loadFromDefaults()
}
//-- End of ViewDidLoad
//Prepare for segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
app.profile.saveToDefaults()
}
//MARK -> ADD CONTACTS BUTTON
@IBAction func addContactsSelected(_ sender: AnyObject) {
_ = CNContactPickerViewController()
let contactPicker = CNContactPickerViewController()
contactPicker.displayedPropertyKeys = [CNContactPhoneNumbersKey]
contactPicker.delegate = self
contactPicker.predicateForSelectionOfContact = NSPredicate (value:false)
contactPicker.predicateForSelectionOfProperty = NSPredicate(value: true)
self.present(contactPicker, animated: true, completion: nil)
}
//MARK -> WHEN A CONTACT IS SELECTED
func contactPicker(_ picker: CNContactPickerViewController, didSelect contactProperty: CNContactProperty) {
let newitem = contactProperty.value as! CNPhoneNumber
app.profile.contacts.append(newitem.stringValue)
app.profile.saveToDefaults()
tableView.reloadData()
}
//MARK -> TABLEVIEW
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return app.profile.contacts.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
cell!.textLabel?.text = app.profile.contacts[indexPath.row]
return cell!
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
app.profile.contacts.remove(at: indexPath.row)
app.profile.saveToDefaults()
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
}
}