【发布时间】:2015-07-29 16:40:43
【问题描述】:
在我的程序中,当按下按钮时,我正在向数据库添加信息,包括创建发票编号然后调用 segue 到新的视图控制器。当调用新的视图控制器时,我想传递那个发票号码。一切正常,我可以毫无问题地传递样本数据。但是,似乎在我的按钮之前调用了“override func prepareForSegue(segue:NSStoryboardSegue,发件人:AnyObject!){}”(在初始化视图控制器时?),所以我传递了一个空白值。如何让我的 prepareForSegue 等到按下按钮后?这是我目前拥有的代码。
@IBAction func createInvoice(sender: AnyObject) {
let realm = Realm()
let invoicepull = Invoice()
let invoicecount = realm.objects(Invoice)
let invoicenraw = invoicecount.count
let a = 100
let invoicenumber = a + invoicenraw
var invoicefile = Invoice()
invoicefile.inumber = invoicenumber
invoicefile.cnumber = clientcombo.stringValue
invoicefile.cost = owed.doubleValue
invoicefile.paid = paid.doubleValue
invoicefile.sevicecode = service.stringValue
invoicefile.dateofservice = NSDate()
// Save your object
realm.beginWrite()
realm.add(invoicefile)
realm.commitWrite()
//Sent notification
performSegueWithIdentifier("cinvoiceseuge", sender: nil)
println("Inside Action")
println(invoicenumber)
dismissViewController(self)
}
override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "cinvoiceseuge") {
//Checking identifier is crucial as there might be multiple
// segues attached to same view
var detailVC = segue.destinationController as! invociegenerator;
detailVC.toPass = invoicenumber
println("Inside Sugue")
println(invoicenumber)
}
}
更新:我相信这是 Realm 数据库的一个问题,导致其行为异常。如果我删除所有领域代码,程序会按预期工作,我可以传递一个静态虚拟值。
【问题讨论】:
-
我不明白“等到我的按钮被按下”。
createInvoice不是被调用因为按钮被按下了吗? -
@Phillip Mills 是的,所以当按下按钮时会调用 createinvoice 并生成发票编号,但 prepareforSugue 在 createinvoice 之前被调用,因此它无法发送值,因为它不是创建的还没有。
-
只有当你将 segue 连接到故事板中的按钮而不是视图控制器本身时,才会发生这种情况。但是,如果这是真的,您在调用
performSegueWithIdentifier时也会收到错误消息。您可以尝试在每个方法的开头记录消息以查看确切的顺序吗? -
嗯,也许我错过了一些东西。 sugue 连接到视图控制器,我没有错误。使用“println()”语句进行调试时,我得到了。 'Inside Sugue 0 Second View Controller 0 Inside Action 107' 在我得到发票号码之前显示第二个视图控制器正在打开??
-
我不能保证这会有所帮助,但如果您目前在其中打印“Inside Sugue 0”,那么看到
NSLog("prepareForSegue: %@", NSThread.callStackSymbols())的结果会很有趣。它可能会显示为什么会提前触发 segue。