Ios 传递数据有问题
我无法通过prepareForSegue将数据从MainVC传递到EditVC。问题的要点是我试图编辑已经输入(保存在Firestore数据库中)的报价信息(报价和作者)。当滑动(UIContextualAction)并点击编辑时,假设它将数据传递到EditVC,在那里它会将引用文本和作者文本放在自己的UITextView中,在那里它是可编辑的。编辑文本后,点击save,它将更新Firestore中的条目;然后MainVC重新加载以更新其视图。EditVC的segue工作正常,但它不会在各自的文本视图中显示引用和作者文本。我三天来一直把头撞在墙上想弄明白。非常感谢你们的任何帮助或指导。我可以根据要求提供Github链接 MainVC:Ios 传递数据有问题,ios,swift,Ios,Swift,我无法通过prepareForSegue将数据从MainVC传递到EditVC。问题的要点是我试图编辑已经输入(保存在Firestore数据库中)的报价信息(报价和作者)。当滑动(UIContextualAction)并点击编辑时,假设它将数据传递到EditVC,在那里它会将引用文本和作者文本放在自己的UITextView中,在那里它是可编辑的。编辑文本后,点击save,它将更新Firestore中的条目;然后MainVC重新加载以更新其视图。EditVC的segue工作正常,但它不会在各自的文
}
let edit = UIContextualAction(style: .normal, title: "Edit") { (action, view, nil) in
self.performSegue(withIdentifier: "toEditQuote", sender: self.quotes)
print("Segue initiated")
}
edit.backgroundColor = #colorLiteral(red: 0.1764705926, green: 0.4980392158, blue: 0.7568627596, alpha: 1)
return UISwipeActionsConfiguration(actions: [delete, edit])
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
print("preparing to segue")
if let destination = segue.destination as? EditQuoteVC {
print("Destination = EditQuoteVC")
if let quoteData = sender as? Quote {
print("data passing")
destination.quoteTxt = quoteData.quoteTxt
destination.authorTxt = quoteData.authorTxt
print("data passed")
}
}
}
}
EditQuoteVC(目的地)
Quote.swift
class Quote {
private(set) var quoteTxt: String!
private(set) var authorTxt: String!
private(set) var timestamp: Date!
private(set) var userId: String!
private(set) var documentID: String!
init(quote: String, author: String, timestamp: Date, userId: String, documentID: String) {
self.quoteTxt = quote
self.authorTxt = "- \(author)"
self.timestamp = timestamp
self.userId = userId
self.documentID = documentID
}
class func parseData(snapshot: QuerySnapshot?) -> [Quote] {
var quotes = [Quote]()
guard let snap = snapshot else { return quotes}
for document in snap.documents { //Grabs the documents...
let data = document.data()
let quote = data[QUOTE_TEXT] as? String ?? ""
let author = data[AUTHOR_TEXT] as? String ?? ""
let timestamp = data[TIMESTAMP] as? Date ?? Date()
let userId = data[USER_ID] as? String ?? ""
let documentID = document.documentID
let newQuote = Quote(quote: quote, author: author, timestamp: timestamp, userId: userId, documentID: documentID)
quotes.append(newQuote)
}
return quotes
}
}
在prepareForSegue函数中,您将目的地分配给发件人。应该是:
if let destination = segue.destination as? EditQuoteVC
您在MainVC中设置过断点吗?具体来说,嵌套的if代码是否被命中?
quoteData
是否按预期正确填充?在prepareForSegue
中,您希望sender
是quoteData
的一个实例,但在您的操作中,当您调用performsgue
时,您将sender
设置为nil
。请在上下文中显示let edit…
代码,并提供如何存储报价以在tableview中显示的详细信息;假设是一个QuoteData
数组,那么为什么会有QuoteData
类呢?看起来Quote
类已经完成了您需要的任务。@dfd我没有使用断点,只是在performsgue
和prepareforsgue
中打印语句。控制台显示正在启动的performsgue
,但不显示prepareforsgue
@Paulw11我明白你关于使用QuoteData类的观点。我已经把它注释掉了,只是使用了我在上面添加的Quote
数据模型(Quote.swift)。谢谢大家的帮助。打印语句应该可以代替断点,但您发布的代码中没有断点。。。因此,我的“应该”。正如@GntlmnBndt在他的回答中所暗示的那样,有几种可能性正在发生,包括prepareforsgue
实际上正在被处理,但其中的逻辑是错误的。(我唯一的另一件事是?toEditQuote
的拼写与您在故事板中的命名不符。)您是否尝试过按照建议将该行更改为segue.destination
?
if let destination = segue.destination as? EditQuoteVC