То, что я хочу сделать, это иметь возможность сохранять одновременно несколько объектов в виде таблицы.У меня есть простое табличное представление с простой меткой, где у меня есть кнопка бара, которая может отправить его в режим редактирования.В режиме редактирования я хочу сохранить все объекты, которые я выбрал в режиме редактирования, в область.
Я не думаю, что это так много, как сохранение массива объектов, потому что когда я пытался, все, что он делал, это создавал одну пустую строку в 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
}
}
Я хочу заполнить область несколькими строками, которые явыбрали.Примером этого является, если я выберу ряды 4 и 5, я хочу сохранить каждый из них одновременно в царство, но они будут разными объектами в царстве, так что это создаст 2 строки, один из которых будет 4, а другой - существом.5.
Причина, по которой я хочу это сделать, также заключается в том, чтобы в будущем иметь возможность сохранять несколько выбранных объектов в базе данных, содержащей более одного столбца.Если в этом предположении у меня есть четыре столбца: id, Number, Written и Roman, я хочу сохранить данные каждой выбранной строки в этой новой базе данных области.
Примером этого может быть, если я снова выберу 4 и 5, он создаст 2 новые строки в области, причем одна из строк будет иметь «4», «Четыре» и IV, и идентификатор в каждом столбце, в то время какдругая строка имеет «5», «пять» V и идентификатор в каждом столбце.
Надеюсь, я не был слишком смутным и сбивающим с толку.Если я могу помочь, пожалуйста, спросите.Спасибо
Обновление:
Посредством поиска через переполнение стека и с помощью 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)
}
}
}
спасибо за помощь.