2016-12-08 1 views
0

Я в настоящее время есть два массива словарей для хранения данных:Как хранить несколько значений TextField из нескольких строк в различных разделах UITable

var workoutData = [String:[String:[String:Int]]]() 

и

var workoutSets = [String:[String:Int]]() 

поручает данные для workoutSets, когда checkBox проверяется в конце этой строки, а затем назначает данные workoutSets на workoutData в целом:

workoutSets["Set \(indexPath.row)"] = ["Weight":Int(weightLifted)!, "Reps":Int(repsPerformed)!] 

workoutData[exercise] = workoutSets 

Это работает отлично для первого раздела данных, но когда я вводить данные в первую строку следующего раздела в UITable и проверять checkbox, значения для других строк данных переносятся вперед. Я добавил скриншот, чтобы вы могли видеть, с чем я столкнулся.

При печати workoutData выглядит

["Cable Row": ["Set 2": ["Weight": 10, "Reps": 12],"Set 3": ["Weight": 28, "Reps": 8],"Set 1": ["Weight": 45, "Reps": 5]], 
"Arnold Press": ["Set 2": ["Weight": 10, "Reps": 12], "Set 3": ["Weight": 28, "Reps": 8], "Set 1": ["Weight": 10, "Reps": 12]]] 

screenshot of problem

Есть ли лучший способ хранения этой информации, потому что я также использую workoutData в методе cellForRowAt при загрузке таблицы, так что клетки данные не будут использоваться повторно при загрузке новой ячейки.

+0

, вероятно, нужно бы увидеть метод cellForRowAt и полную функцию, которая вызывается при проверке флажок (если есть больше). Вы также можете использовать структуры, чтобы упорядочить эту информацию гораздо более четко, чем вклады вложенных уровней. Это сложно отслеживать. Вы также можете использовать свойство «index» вместо «set 1», «set 2» и т. Д. Затем вы можете просто найти правильный набор по индексу. – Frankie

+0

@Frankie Если бы я хотел использовать структуру, вы бы предложили что-то вроде: 'struct workoutExercise: var name: String? var weightLifted: [Int]? var repsPerformed: [Int]? ' и обновлять данные, когда каждый флажок установлен? – MHDev

ответ

1

Для хранения таких данных, которые представляют собой структурированный объект с определенными атрибутами и свойствами, было бы разумнее определить его как объект, унаследованный от NSObject.

Для этого пользовательского объекта вы можете определить требуемые свойства как «вес» & «повторения». Также создайте составной объект класса Set, к которому вы можете добавить массив объектов. Ниже приведена иерархия объектов.

public class Workout { var displayName:String? var sets:[Set]? var key:String? }

public class Set { var weight:Int? var reps:Int? }

var workouts = [Workout]()

var workout1 = Workout() workout1.displayName = "Arnold Press" workout1.sets = [Set]() var set1 = Set() set1.reps = 10 set1.weight = 80 workout1.sets?.append(set1)

var set2 = Set() set2.reps = 12 set2.weight = 80 workout1.sets?.append(set2)

var workout2 = Workout() workout2.displayName = "Cable Row" workout2.sets = [Set]() var set11 = Set() set11.reps = 10 set11.weight = 80 workout1.sets?.append(set11)

var set22 = Set() set22.reps = 12 set22.weight = 80 workout2.sets?.append(set22)

workouts.append(workout1) workouts.append(workout2)

Смежные вопросы