В моей программе при нажатии кнопки я добавляю информацию в базу данных, включая создание номера счета-фактуры, а затем вызов segue на новый контроллер представления. Когда вызывается новый контроллер вида, я хотел бы передать этот номер счета. Все работает отлично, я могу без проблем передавать данные по образцам. Однако кажется, что перед моей кнопкой (после инициализации контроллера представления?) Вызывается «переопределить func prepareForSegue (segue: NSStoryboardSegue, отправитель: AnyObject!) {}", Поэтому я пропускаю пустое значение. Как я могу сделать мой метод подготовкиForSegue дождаться нажатия кнопки? Вот код, который у меня есть.Выполнение команды prepareForSegue дождитесь окончания записи базы данных Realm
@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 вызывается и генерируется номер счета-фактуры, но prepareforSueue вызывается перед createinvoice, поэтому он не может отправлять по значению, потому что он еще не был создан. –
Это должно произойти только в том случае, если у вас есть segue, связанный с кнопкой в вашей раскадровке, а не с самим контроллером представления. Однако, если это так, вы также должны получить сообщение об ошибке при вызове 'performSegueWithIdentifier'. Можете ли вы попытаться зарегистрировать сообщения в начале каждого метода, чтобы увидеть точную последовательность? –