Как получить доступ к строкам в сохраненной структуре массива из UITableView - PullRequest
2 голосов
/ 17 января 2020

У меня есть структура, которая состоит из строк и массива упражнений. Пользователи вводят свои упражнения, и эти значения сохраняются на устройстве с использованием основных данных. Значения показаны в UITableview. Я добавил кнопку в UITableview, чтобы можно было редактировать введенные пользователем данные. Моя проблема в том, что я не знаю, как получить доступ к указанному c тексту, введенному пользователем, чтобы он мог его редактировать.

Мой массив:

var contacts = [Contact]()

Структура:

//Structure
struct Contact {
var id:String = "Contact - \(UUID())"
var fullname: String
var exercises : [Exercise]
}

Мой класс упражнений

class Exercise : NSObject , NSSecureCoding{
static var supportsSecureCoding: Bool = true

var excerciseName: String
var excerciseReps: String
var excerciseSets: String
var excerciseWeights: String

init(Name : String, Reps : String, Sets : String, Weights : String) {
    excerciseName = Name
    excerciseReps = Reps
    excerciseSets = Sets
    excerciseWeights = Weights
}

func encode(with aCoder: NSCoder) {
    aCoder.encode(excerciseName, forKey: "excerciseName")
    aCoder.encode(excerciseReps, forKey: "excerciseReps")
    aCoder.encode(excerciseSets, forKey: "excerciseSets")
    aCoder.encode(excerciseWeights, forKey: "excerciseWeights")
}

required convenience init?(coder aDecoder: NSCoder) {
    let excerciseName = aDecoder.decodeObject(forKey: "excerciseName") as! String
    let excerciseReps = aDecoder.decodeObject(forKey: "excerciseReps") as! String
    let excerciseSets = aDecoder.decodeObject(forKey: "excerciseSets") as! String
    let excerciseWeights = aDecoder.decodeObject(forKey: "excerciseWeights") as! String

    self.init(Name: excerciseName, Reps: excerciseReps, Sets: excerciseSets, Weights: excerciseWeights)

   }
  }

Код, который я использую, чтобы получить доступ к заданному c упражнению, введенному пользователем, -

print(self.contacts[indexPath.section].exercises)

Однако при этом будет напечатано приведенное ниже значение, показанное на изображении, а не фактический текст, введенный пользователем. Как я могу получить доступ к фактическому тексту, который ввел пользователь?

enter image description here

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Вы забыли реализовать var description в Exercise, который является частью протокола NSSecureCoding. Это свойство отвечает за печать содержимого объекта в виде строки:

class Exercise : NSObject , NSSecureCoding{

//...

override var description: String {
    return "\(excerciseName): \(excerciseReps)x\(excerciseSets) w. \(excerciseWeights)"
    // or whatever you want format to be
}
0 голосов
/ 17 января 2020

Если вы хотите просто получить числовую часть идентификатора, просто удалите часть «Контакт -» в строке, которую я прокомментировал

//Structure
struct Contact {
var id:String = "Contact - \(UUID())"  //this line
var fullname: String
var exercises : [Exercise]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...