首页 > 解决方案 > 如何在另一个viewController的tableViewCells中呈现保存在Realm中的数据?

问题描述

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

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

现在,将数据存储在“内部”很重要——在退出某个 viewController 或关闭应用程序之后也是如此。因此,我使用 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
        }
    }

带有 tableView 的 Viewcontroller:

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 = "" }

谢谢!

标签: iosswiftuitableviewrealmsegue

解决方案


打电话后

try! realm.write {
realm.add(NewPerson)
}

您已经保存在领域,因此您不必在 segue 上传递它,您可以通过调用从下一个视图控制器上的领域检索

realm.objects(ofType: NewPerson.self)

这将返回一个数组,NewPerson或者您也可以使用主键只搜索一个

realm.object(ofType: NewPerson.self, forPrimaryKey: yourKey)

推荐阅读