Как сохранить несколько объектов, создавая разные строки для каждого элемента в области - PullRequest
0 голосов
/ 30 ноября 2018

То, что я хочу сделать, это иметь возможность сохранять одновременно несколько объектов в виде таблицы.У меня есть простое табличное представление с простой меткой, где у меня есть кнопка бара, которая может отправить его в режим редактирования.В режиме редактирования я хочу сохранить все объекты, которые я выбрал в режиме редактирования, в область.

Я не думаю, что это так много, как сохранение массива объектов, потому что когда я пытался, все, что он делал, это создавал одну пустую строку в 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)
        }
    }
}

спасибо за помощь.

1 Ответ

0 голосов
/ 30 ноября 2018

Вам необходимо инициировать объект SaveTest с меткой внутри цикла, а не перед ним.

func favorite(label: [String]) {

    try? realm!.write {

       for string in label {

            let saveTest = SaveTest(label: string)
            realm.add(saveTest)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...