- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个应用程序,其中一个功能是,在一个 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 = "" }
谢谢!
最佳答案
老实说,这个问题有点太宽泛了。你要求的是同时做几件事。如果我要为您编写实现,我不会回答您关于您需要做什么的实际问题。我想你问的是这个:
所以我的建议是这样的。
不要使用 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/
我是一名优秀的程序员,十分优秀!