gpt4 book ai didi

swift - 使用核心数据索引从核心数据中获取特定项目

转载 作者:行者123 更新时间:2023-11-30 10:27:55 28 4
gpt4 key购买 nike

下面的 swift 代码在加载时会在名为“UserName”的核心数据实体中放置 3 个项目。当用户在文本字段 EnterT 中输入数字时,我希望标签 labelName 显示它。因此,当用户输入 1 时,标签应显示 jessica biel,因为 Jesical Biel 是输入的第一个名字。有人提出以下建议来解决这个问题。我不知 Prop 体该怎么做。我在下面添加了一个 gif。

将输入的数字转换为 Int。如果成功,则将整数传递给笑话并获取与 idx 属性匹配的记录。

https://github.com/redrock34/index-fetch

enter image description here

enter image description here

导入UIKit 导入核心数据

  class ViewController: UIViewController,UITextFieldDelegate {
@IBOutlet var labelName : UILabel!
@IBOutlet var enterT : UITextField!

lazy var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

override func viewDidLoad() {
super.viewDidLoad()

openDatabse()
fetchData()
enterT.delegate = self


}

func textFieldDidEndEditing(_ textField: UITextField) {
guard let index = Int(textField.text!) else {
// display an alert about invalid text
return
}
joke(at: index - 1)
}

func joke(at index : Int) {
let fetchRequest = NSFetchRequest<Users>(entityName: "Users")
fetchRequest.predicate = NSPredicate(format: "idx == %d", Int32(index))
do {
if let user = try context.fetch(fetchRequest).first {
labelName.text = user.username
}
} catch {
print("Could not fetch \(error) ")
}
}
func openDatabse()
{
let names = ["kim kardashian", "jessica biel", "Hailey Rienhart"]
for i in 0..<names.count {
let newUser = Users(context: context)
newUser.username = names[i]
newUser.idx = Int32(i + 1)
}
print("Storing Data..")
do {
try context.save()
} catch {
print("Storing data Failed", error)
}
}
func fetchData()
{
print("Fetching Data..")
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Users")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
for data in result as! [NSManagedObject] {
let userName = data.value(forKey: "username") as! String

print("User Name is : "+userName)
}
} catch {
print("Fetching data Failed")
}
}}

最佳答案

当然,您必须为 idx 属性分配值,并且必须将获取的结果分配给标签。

首先替换

let appDelegate = UIApplication.shared.delegate as! AppDelegate //Singlton instanc
var context:NSManagedObjectContext!

lazy var context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
<小时/>

然后将 openDatabse saveData 替换为

func openDatabse()
{
let names = ["kim kardashian", "jessica biel", "Hailey Rienhart"]
for i in 0..<names.count {
let newUser = Users(context: context)
newUser.name = names[i]
newUser.idx = Int32(i + 1)
}
print("Storing Data..")
do {
try context.save()
} catch {
print("Storing data Failed", error)
}
}

最后在joke中添加一行来显示值

func joke(at index : Int) {
let fetchRequest = NSFetchRequest<Users>(entityName: "Users")
fetchRequest.predicate = NSPredicate(format: "idx == %d", Int32(index))
do {
if let user = try context.fetch(fetchRequest).first {
labelName.text = user.username
}
} catch {
print("Could not fetch \(error) ")
}
}

它创建记录并分配适当的索引。然后在文本字段中输入一个数字就可以了。

但是,每次启动应用程序时,都会再次插入具有相同名称和索引的 3 条记录。请注意这一点!

关于swift - 使用核心数据索引从核心数据中获取特定项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59744300/

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