我想做的是能够一次保存并在一个tableview中放置多个对象。我有一个带有简单标签的简单表格视图,其中有一个可以将其发送到编辑模式的条形按钮。在编辑模式下,我希望能够将在编辑模式下选择的所有对象保存到领域中。
我认为它并没有保存一个对象数组那么多,因为当我尝试所有操作时,都是在Realm中创建一个空行。
这是我的主要viewController:
import UIKit
import Realm
import RealmSwift
class ViewController: UIViewController, UITableViewDelegate,
UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var realm: Realm!
let num = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"]
var testingBool = false
var values: [String] = []
@IBOutlet weak var itemBtn: UIBarButtonItem!
@IBOutlet weak var saveBtn: UIBarButtonItem!
override func viewDidLoad() {
super.viewDidLoad()
print(Realm.Configuration.defaultConfiguration.fileURL!)
realm = try! Realm()
self.tableView.delegate = self
self.tableView.dataSource = self
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return num.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.txtLbl?.text = "\(num[indexPath.row])"
return cell
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
if testingBool == true {
values.append(num[indexPath.row])
}
}
func tableView(_ tableView: UITableView, didDeselectRowAt indexPath: IndexPath) {
if testingBool == true {
if let index = values.index(of: num[indexPath.row]) {
values.remove(at: index)
}
}
}
@IBAction func btnPressed(_ sender: Any) {
testingBool = !testingBool
if testingBool == true {
tableView.allowsMultipleSelection = true
tableView.allowsMultipleSelectionDuringEditing = true
itemBtn.title = "cancel"
} else if testingBool == false {
tableView.allowsMultipleSelection = false
tableView.allowsMultipleSelectionDuringEditing = false
itemBtn.title = "item"
}
}
@IBAction func saveBtnPressed(_ sender: Any) {
if testingBool == true {
favorite(label: values)
}
}
func favorite(label: [String]) {
let saveTest = SaveTest()
try? realm!.write {
for string in num {
realm.add(saveTest)
}
}
}
}
这是领域模型:
import Foundation
import RealmSwift
import Realm
class SaveTest: Object {
@objc dynamic var label = ""
convenience init(label: String) {
self.init()
self.label = label
}
}
我想要发生的是用我选择的多行填充Realm。 例如,如果我选择4和5的行,我想将它们同时保存到领域中,但是它们是领域中的不同对象,那么它将创建2行,其中一行为4,另一行为五。
我要这样做的原因也是将来将来能够将多个选定对象保存到具有多列的数据库中。如果在这个假设中我有四列:id,Number,Written和Roman,我想将每一行的数据保存到这个新的领域数据库中。
例如,如果我再次选择4和5,它将在领域中创建2个新行,其中一行具有“ 4”,“ Four”和IV,其中每一列都有id,而另一行具有每列中包含“ 5”,“五个” V和ID。
我希望我不要太含糊和令人困惑。如果我能以任何方式提供帮助,请询问。 谢谢
更新:
通过遍历堆栈溢出并在koropok的帮助下,我弄清楚了如何一次保存多个数组。我发现当您想一次遍历多个数组时使用zip()。
这是我拥有的新领域保存功能。顺便说一句,它有自己的对应领域类。
func realmed(label: [String], romanNum: [String], txt: [String]) {
try? realm!.write {
for (stringOne, (stringTwo, stringThree)) in zip(label, zip(romanNum, txt)) {
let realmed = Realmed(label: stringOne, romanNum: stringTwo, txt: stringThree)
realm.add(realmed)
}
}
}
感谢您的帮助。
答案 0 :(得分:1)
您需要使用循环内而不是循环内的标签来初始化SaveTest对象。
[root@blah01 bin]# ./version.sh
Using CATALINA_BASE: /opt/apache-tomcat-7.0.69
Using CATALINA_HOME: /opt/apache-tomcat-7.0.69
Using CATALINA_TMPDIR: /opt/apache-tomcat-7.0.69/temp
Using JRE_HOME: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el6_10.x86_64/jre
Using CLASSPATH: /opt/apache-tomcat-7.0.69/bin/bootstrap.jar:/opt/apache-tomcat-7.0.69/bin/tomcat-juli.jar
Server version: Apache Tomcat/7.0.64
Server built: Aug 19 2015 17:18:06 UTC
Server number: 7.0.64.0
OS Name:Linux
OS Version: 2.6.32-754.3.5.el6.x86_64
Architecture: amd64
JVM Version: 1.8.0_181-b13
JVM Vendor: Oracle Corporation