gpt4 book ai didi

ios - 如何在另一个 viewController 的 tableViewCells 中呈现保存在 Realm 中的数据?

转载 作者:行者123 更新时间:2023-11-28 07:38:10 24 4
gpt4 key购买 nike

我正在尝试制作一个应用程序,其中一个功能是,在一个 viewController 中,用户可以输入有关给定人员的一些数据(照片、姓名和特定问题的答案)。当按下“保存新人按钮”时,用户将被重定向到之前的 viewController,其中包含一个 tableView。

在这个 tableView 中,我希望在用户每次按下另一个 viewController 中的“保存新人按钮”时创建一个新单元格。当然,该单元格应该包含此人的姓名(最好还有照片的缩影)。

现在,数据“内部”存储很重要——在退出某个 viewController 或关闭应用程序之后也是如此。因此,我使用 Realm 作为数据库来存储所有数据。

在使用 Realm 方面,我是一个新手,所以我的问题可能看起来很愚蠢。基本上,我想我已经能够让“保存新人按钮”保存 Realm 数据库中的所有数据。但是当试图让按钮在以前的 viewController 中创建新的单元格(必须保留,一旦创建!!)时......各种奇怪的事情发生了!

下面的代码显示的是我目前尝试至少通过 segue 传递名称,但这会产生几个问题:单元格不会停留。如果您尝试添加新单元格,它只会覆盖旧单元格。最后,PeopleData.count 显然会计算名称中的字母数 - 并创建 fx。 5 个相同的单元格组成一个 5 个字母长的名字! :D

我确定这不是传递数据的正确方式……那么呈现这些数据的最佳方式是什么?以便单元格在创建后保持不变 - 并且用户可以添加几个新人/几个新单元格而不覆盖旧单元格!

相关代码:

viewController,用户可以在其中输入数据:

@IBAction func SaveNewPerson() {     
let NewPerson = person()
NewPerson.name = PersonName.text!
NewPerson.answer = PersonAnswer.text!
NewPerson.extraIdentifier = PersonExtraIdentifier.text!

let realm = try! Realm()

try! realm.write {
realm.add(NewPerson)
}
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// let allPeople = realm.objects(person.self)

let SomePersonName = PersonName.text!

if segue.identifier == "PassingSomeInfo" {
if let vc = segue.destination as? AllPersonsInYourDiary {
vc.PeopleData = SomePersonName
}
}

Viewcontroller 与 tableView:

var PeopleData: ""

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return PeopleData.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Person1", for: indexPath)

cell.textLabel?.text = self.PeopleData
cell.textLabel?.numberOfLines = 0
cell.textLabel?.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)

return cell
}

第三个 viewController(用于存储所有人员数据):

class person: Object {

@objc dynamic var name = ""
@objc dynamic var answer = ""
@objc dynamic var extraIdentifier = "" }

谢谢!

最佳答案

老实说,这个问题有点太宽泛了。你要求的是同时做几件事。如果我要为您编写实现,我不会回答您关于您需要做什么的实际问题。我想你问的是这个:

  1. 如何从 Realm 写入和检索数据。
  2. 如何构建我的代码以在 View 之间传递数据。

所以我的建议是这样的。

不要使用 segue 传递数据。创建一个将访问 Realm 并检索该 View 所需数据的类。将其命名为 Database、Realm 或 LocalStorage。

在该类中添加用于写入 Realm 和从 Realm 检索的方法。如何做到这一点,您可以在 Realm 文档中找到:https://realm.io/docs/swift/latest/

在您需要显示条目的 View 中实例化您的 Realm 类。一些伪代码可以帮助你:

class ViewController {

fileprivate let database = LocalStorage()
fileprivate var peopleData: [People]()

viewDidLoad() {
super.viewDidLoad()
database.retrieveData(primaryKey: "extraIdentifier", completionHandler: { entries, err in
if err == nil {
self.peopleData = entries
}
})
}


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return peopleData.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) ->
UITableViewCell {
let person = self.peopleData[indexPath.item]
let cell = tableView.dequeueReusableCell(withIdentifier: "Person1", for: indexPath)

cell.textLabel?.text = person.name
cell.textLabel?.numberOfLines = 0
cell.textLabel?.font = UIFont.preferredFont(forTextStyle: UIFontTextStyle.headline)

return cell
}

}

关于ios - 如何在另一个 viewController 的 tableViewCells 中呈现保存在 Realm 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52890619/

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