Что я пытаюсь сделать в целом:
1. Создайте таблицу со всеми зарегистрированными пользователями (хранится в основных данных).
2. Затем разрешите пользователю выбрать зарегистрированного пользователя, нажав на строку.
3. Когда пользователь выбирает строку, открывается новая страница с подробной информацией о пользователе.
Я пытаюсь решить эту проблему:
1. Сначала сохраните имя пользователя из указанной ячейки в «UserDefaults.standard».
2. Затем на второй странице получите доступ к сохраненному имени пользователя из «UserDefaults.standard» и используйте это динамическое значение для извлечения базовых данных для получения более подробной информации о пользователе.
Проблемы:
Я уверен, что данные, которые передаются в «UserDefaults.standard», являются полной таблицей, а не данными из определенной ячейки. Я видел это с помощью «Print ()», на самом деле показать все строки, а не только одну строку, которая выбрана.
Таким образом, имя пользователя, которое затем генерируется на второй странице, представляет собой случайную строку, которая находится ниже (см. Рисунок).
![enter image description here](https://i.stack.imgur.com/QlhlR.png)
public class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
var userNameobject : [NSManagedObject] = []
@IBAction func pushTwo(_ sender: Any) {
}
@IBOutlet weak var usersList: UITableView!
override public func viewDidLoad() {
super.viewDidLoad()
usersList.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
public override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
return }
let managedContext = appDelegate.persistentContainer.viewContext
let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Users")
do {
userNameobject = try managedContext.fetch(fetchRequest)
} catch let error as NSError {
print("Could not fetch. \(error), \(error.userInfo)")
}
}
public func tableView(_ usersList: UITableView, numberOfRowsInSection section: Int) -> Int {
return userNameobject.count
}
public func tableView(_ usersList: UITableView, cellForRowAt indexPath: IndexPath)
-> UITableViewCell {
let person = userNameobject[indexPath.row]
let cell = usersList.dequeueReusableCell(withIdentifier: "CellTwo", for: indexPath) as UITableViewCell
cell.textLabel?.text = person.value(forKeyPath: "userName") as? String
// STORE USERNAME
let defaults = UserDefaults.standard
defaults.set(person.value(forKeyPath: "userName"), forKey: "userNameDefault")
return cell
}
}
public func tableView(_ userList: UITableView, didSelectRowAt indexPath: IndexPath)
{
}