我通常要做什么:
1.生成一个包含所有注册用户的表(存储在核心数据中)。
2.然后,允许用户通过按一行来选择注册用户。
3.当用户选择一行时,将打开一个新页面,其中包含详细的用户信息。
我正在尝试通过以下方式解决此问题:
1.首先将给定单元格中的用户名存储到“ UserDefaults.standard”中。
2.然后在第二页上,从“ UserDefaults.standard”访问存储的UserName,并使用该动态值检索Core Data以获取更详细的用户信息。
问题:
我确定传递到“ UserDefaults.standard”的数据是完整表,而不是来自特定单元格的数据。我已经通过使用“ Print()”看到了这一点,实际上是显示了所有行,而不是仅显示了选定的一行。
因此,然后生成到第二页的UserName是一个随机行,该行进一步向下(参见图片)。
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)
{
}
答案 0 :(得分:0)
1-将segue源连接到VC,而不是连接到单元格
func tableView(_ userList: UITableView, didSelectRowAt indexPath: IndexPath)
{
self.performSegue(withIdentifier: "toSecond", sender:userNameobject[indexPath.row])
}
2-实作
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
super.prepare(for: segue, sender: sender)
if let des = segue.destination as? SecondVC {
des.person = sender as! NSManagedObject
}
}
3-
class SecondVC:UIViewController {
var person: NSManagedObject?
}
答案 1 :(得分:-2)
我通过给“发件人:”一个完全相同的行来解决此问题,该行将生成每个给定单元的用户名。现在可以正常使用了!
public func tableView(_ userList: UITableView, didSelectRowAt indexPath: IndexPath)
{
let person = userNameobject[indexPath.row]
let two = person.value(forKeyPath: "userName") as? String
self.performSegue(withIdentifier: "userLinkSegue", sender: two!)
print(two!)
// STORE USERNAME
let defaults = UserDefaults.standard
defaults.set(two!, forKey: "userNameDefault")
}