ios - 如何在另一个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 = "" }
谢谢!
解决方案
打电话后
try! realm.write {
realm.add(NewPerson)
}
您已经保存在领域,因此您不必在 segue 上传递它,您可以通过调用从下一个视图控制器上的领域检索
realm.objects(ofType: NewPerson.self)
这将返回一个数组,NewPerson
或者您也可以使用主键只搜索一个
realm.object(ofType: NewPerson.self, forPrimaryKey: yourKey)
推荐阅读
- javascript - 如何在 blazor(WASM)中解决特定于浏览器的(Firefox)“未设置 .NET 调用调度程序”
- laravel-lighthouse - Laravel Lighthouse 模式验证问题未定义标量混合
- bash - Hadoop -ls 命令
- flutter - Flutter 在使用 BottomNavigationBar 加载的页面之间切换
- javascript - 无法从异步函数获取返回值
- google-sheets - Sumif 但不同行的范围标准
- c# - 如何将 datagridview 对象传递给另一个新创建的表单?
- mysql - 在 MySQL 中使用负前瞻正则表达式
- javascript - VueJS TypeScript 使用 ChartJS - 解析错误:'}' 预期
- neural-network - 深度强化学习