首页 > 解决方案 > 循环写入领域

问题描述

我将这个对象类的锻炼信息存储在 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?
}

我将数据存储为一个数组,我想将其写入 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)
    }
}

这种情况下的问题是,在运行realm.write ...时它只添加for i in 0函数的最后一个值。我尝试将realm.write函数放入for i in 0循环中,但随后它崩溃了。每个数组都包含相等数量的对象。有任何想法吗?

标签: iosarraysswiftrealm

解决方案


你可以试试这段代码:

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)
}

如果可能,您应该只add进行write一次性能优化。希望这可以帮助。


推荐阅读