gpt4 book ai didi

swift - 保存并从 CoreData 中的 TextField 获取

转载 作者:行者123 更新时间:2023-11-30 10:50:41 25 4
gpt4 key购买 nike

我想从文本字段保存和获取数据。我的代码如下所示:

import UIKit
import CoreData

class DetailViewController: UIViewController, UITextViewDelegate {
private var currentTextField: UITextField?

var Detail: [NSManagedObject] = [ ]

@IBOutlet weak var TableViewDetail: UITextView!
@IBOutlet weak var LabelDetail: UILabel!
@IBOutlet weak var TextField: UITextField!

保存按钮:

@IBAction func SaveButton(_ sender: Any) {    
if (TextField.text == "") {
self.save2(TextField.text!)
}

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {return}
let managedContext = appDelegate.persistentContainer.viewContext

do {

try managedContext.save()

} catch let err as NSError {
print("Cant save arrangement", err)
}

print("TextFieldEditingEnd2")
}

这个有必要吗?

@IBAction func Submit(sender: UIButton) {
if let currentTextField = currentTextField {
currentTextField.resignFirstResponder()
}
}

我认为这是生成的错误:

func textFieldDidEndEditing(_ textField: UITextField) {
if (TextField.text != "")
{
currentTextField = textField
print("TextFieldEditingEnd2")
if CoreDataHandler.saveDetail(itemDetail: (currentTextField?.text!)!) {
for item in CoreDataHandler.fetchDetail()! {
print("\(String(describing: item.itemDetail))")
}}
}
}


override func viewDidLoad() {
super.viewDidLoad()

TextField.delegate = self as? UITextFieldDelegate
// Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

override func viewWillAppear(_ animated: Bool) {
// func viewDidload(_ animated: Bool) {
}

func textFieldShouldReturn(textField: UITextField) -> Bool {
// User finished typing (hit return): hide the keyboard.
textField.resignFirstResponder()
return true
}

保存功能

func save2(_ itemName: String){

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let managedContext = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "ItemDetail", in: managedContext)!
let showItemDetail = NSManagedObject(entity: entity, insertInto: managedContext)

showItemDetail.setValue(itemName, forKey: "itemDetail")

do {
try managedContext.save()
} catch let err as NSError {
print("Failed to save item",err)
}

}

有错误

[SmallApps.DetailViewController TextFieldIO:]: unrecognized selector sent to instance 0x7fad6de3dc10'

*** 首先抛出调用堆栈:“

有人给个建议吗?

编辑:保存和获取功能:

保存:

class func saveDetail(itemDetail: String) -> Bool {
let context = getContext()
let entity = NSEntityDescription.entity(forEntityName: "ItemDetail", in: context)
let manageObject = NSManagedObject(entity: entity!, insertInto: context)
manageObject.setValue(UITextField.self, forKey: "itemDetail")
do {
try context.save()
return true
}catch {
return false
}
}

获取:

class func fetchDetail() -> [ItemDetail]? {
let context = getContext()
var showItemDetail:[ItemDetail]? = nil
do {
showItemDetail = try context.fetch(ItemDetail.fetchRequest())
return showItemDetail
}catch {
return showItemDetail
}
}

最佳答案

保存itemDetail而不是UITextField本身。

对于:调用CoreHandler.saveDetailtextFieldDidEndEditing

使用一个保存功能:

 func saveDetail(itemDetail: String) {
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return false }
let context = appDelegate.persistentContainer.viewContext
let entity = NSEntityDescription.entity(forEntityName: "ItemDetail", in: context)
let manageObject = NSManagedObject(entity: entity!, insertInto: context)
manageObject.setValue(itemDetail, forKey: "itemDetail")
do {
try context.save()
} catch {
.. handle catch
}
}

对于调用save2()函数的SaveButton。您没有在 SaveButton

中保存任何内容
@IBAction func SaveButton(_ sender: Any) { 
// You are comparing TextField.text == "" and saving? If text is not empty you are trying to save. So use !=
if let text = TextField.text, text != "" {
saveDetail(itemDetail: text)
}
}

一些建议:

  1. 您的变量名称违反了Swift准则。请用驼峰命名法
  2. 不要对变量使用!(强制转换),而是通过 ifguard 语句使用可选链。
  3. 您可以从很多地方节省开支。遵循DRY原则。有一个 API 可以保存到 CoreData。
  4. saveDetail 不应返回 bool。违反了命令-查询分离。

关于swift - 保存并从 CoreData 中的 TextField 获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54613076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com