简体   繁体   English

循环写入Realm

[英]Write to Realm in a loop

I am storing workout information in Realm from this object class: 我正在通过此对象类在Realm中存储锻炼信息:

class Workout: Object {

    @objc dynamic var date: Date?
    @objc dynamic var name: String?
    @objc dynamic var exercise: String?
    @objc dynamic var sets = 0
    @objc dynamic var reps = 0
    @objc dynamic var kg: Double = 0.0
    @objc dynamic var notes: String?
}

I have data stored as an array, that I want to write to Realm, like this: 我将要存储的数据存储为数组,要写入Realm,如下所示:

var workoutName = ""
var exercises = [String]()
var sets = [Int]()
var reps = [Int]()
var kg = [Double]()
var notes = [String]()

@IBAction func saveWorkoutButton(_ sender: Any) {

    let realm = try! Realm()

    print(Realm.Configuration.defaultConfiguration.fileURL!)

    let currenDate = Date() // Get the current date

    let myWorkout = Workout()
    myWorkout.date = currenDate
    myWorkout.name = workoutName

    for i in 0 ..< exercises.count {
        myWorkout.exercise = exercises[i]
        myWorkout.sets = sets[i]
        myWorkout.reps = reps[i]
        myWorkout.kg = kg[i]
        myWorkout.notes = notes[i]

        realm.add(myWorkout)
    }

    try! realm.write {
        realm.add(myWorkout)
    }
}

The problem in this case is that when running the realm.write ... it only adds the last value from the for i in 0 function. 在这种情况下的问题是,在运行realm.write ...它仅将for i in 0函数中的最后一个值相加。 I tried putting the realm.write function inside of the for i in 0 loop, but then it crashes. 我尝试将realm.write函数放入for i in 0循环中的for i in 0 ,但随后崩溃。 Each of the arrays contains equal numbers of objects. 每个数组包含相等数量的对象。 Any ideas? 有任何想法吗?

You can try this code: 您可以尝试以下代码:

var myWorkouts:[Workout] = []
for i in 0 ..< exercises.count {
    let myWorkout = Workout()
    myWorkout.date = currenDate
    myWorkout.name = workoutName
    myWorkout.exercise = exercises[i]
    myWorkout.sets = sets[i]
    myWorkout.reps = reps[i]
    myWorkout.kg = kg[i]
    myWorkout.notes = notes[i]
    myWorkouts.append(myWorkout)
}

try! realm.write {
    realm.add(myWorkouts)
}

You should only add and write once if possible for performance optimisation. 如果可能的话,您只能addwrite一次,以优化性能。 Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM