gpt4 book ai didi

swift - TableViewController 的第二个 segue 创建与第一个相关的 SIGABRT 错误

转载 作者:行者123 更新时间:2023-11-30 13:10:32 25 4
gpt4 key购买 nike

我在一个较大的应用程序中创建了一个笔记本应用程序。我拥有所有功能,包括转至“添加注释”页面,该页面通过单击注释(对其进行编辑)或 + barButtonItem 以编程方式触发。

我需要第二个segue将用户发送回应用程序的主页,但我似乎尝试的每一种方式都与我现有的segue冲突。

任何人都可以建议一种让第二个segue 工作的方法吗?它们都有不同的标识符,我在方法中引用了这些标识符。只是 goHome 转场不起作用......

类 NoteBookViewController:UITableViewController、NoteViewDelegate {

func didUpdateNoteWithTitle(newTitle: String, andBody newBody: String) {
self.noteBookEntries[self.selectedIndex] ["title"] = newTitle
self.noteBookEntries[self.selectedIndex] ["body"] = newBody

self.tableView.reloadData()

saveNotesArray()
}

var noteBookEntries = [[String:String]] ()

@IBAction func newNote() {

var newNote = ["title" : "", "body" : ""]
noteBookEntries.insert(newNote, at: 0)

self.selectedIndex = 0

self.tableView.reloadData()

saveNotesArray()

performSegue(withIdentifier: "editNoteBookSegue", sender: nil)
}

var selectedIndex = -1

func saveNotesArray() {

UserDefaults.standard.set(noteBookEntries, forKey: "notes")
UserDefaults.standard.synchronize()
}

override func viewDidLoad() {
super.viewDidLoad()

if let newNote = UserDefaults.standard.array(forKey: "notes") as? [[String:String]] {
noteBookEntries = newNote
}

self.navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.reply, target: self, action: #selector(NoteBookViewController.navigateToNextViewController))

}

func navigateToNextViewController(){
self.performSegue(withIdentifier: "goHome", sender: self)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return noteBookEntries.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell (withIdentifier: "CELL")! as UITableViewCell
cell.textLabel?.text = noteBookEntries[indexPath.row]["title"]
return cell
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
noteBookEntries.remove(at: indexPath.row)
UserDefaults.standard.set(noteBookEntries, forKey: "notes")
self.tableView.reloadData()
}
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

self.selectedIndex = indexPath.row

performSegue(withIdentifier: "editNoteBookSegue", sender: nil)
}

override func prepare(for segue: UIStoryboardSegue, sender: AnyObject?) {
let notesEditorVC = segue.destination as! NewNoteBookEntryViewController

notesEditorVC.navigationItem.title = noteBookEntries[self.selectedIndex] ["title"]
notesEditorVC.noteBodyText = noteBookEntries[self.selectedIndex] ["body"]
notesEditorVC.delegate = self

}

}

error message relating to original segue - this segue works until the second is added

最佳答案

在您的 prepareForSegue 方法中,第一行是:

let notesEditorVC = segue.destination as! NewNoteBookEntryViewController

每个 Segue 都会调用此方法。当第一次调用它时,它工作得很好,因为目标 View Controller 实际上是 NewNoteBookEntryViewController 类型。

但是,当为第二个 segue 调用此方法时,目标 Controller 的类型不同。因此,当你强制向下倾斜它时,你会发生崩溃。

您应该向 prepareForSegue 方法添加一些逻辑,以便区分 segue。例如:

if segue.identifier == "addNote" {
let notesEditorVC = segue.destination as! NewNoteBookEntryViewController
//some other code
}

关于swift - TableViewController 的第二个 segue 创建与第一个相关的 SIGABRT 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38778469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com