2015-07-29 1 views
0

В моей программе при нажатии кнопки я добавляю информацию в базу данных, включая создание номера счета-фактуры, а затем вызов 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, приводящей к тому, что она ведет себя неожиданно. Если я удалю весь код домена, программа будет работать как ожидалось, и я смогу передать статическое фиктивное значение.

+0

Я не понимаю, «подождите, пока моя кнопка не будет нажата». Разве это не 'createInvoice' **, потому что ** нажата кнопка? –

+0

@Phillip Mills Да, поэтому при нажатии кнопки createinvoice вызывается и генерируется номер счета-фактуры, но prepareforSueue вызывается перед createinvoice, поэтому он не может отправлять по значению, потому что он еще не был создан. –

+0

Это должно произойти только в том случае, если у вас есть segue, связанный с кнопкой в ​​вашей раскадровке, а не с самим контроллером представления. Однако, если это так, вы также должны получить сообщение об ошибке при вызове 'performSegueWithIdentifier'. Можете ли вы попытаться зарегистрировать сообщения в начале каждого метода, чтобы увидеть точную последовательность? –

ответ

0

invoicumberumber в createInvoice() - это локальная переменная, а invoicenumber в файле prepareForSegue() представляется переменной экземпляра. это то, что вы ожидали?

Смежные вопросы