GarySabo
GarySabo

Reputation: 6700

Using a Singleton to pass data in Watchkit

I've used a Singleton in IOS with success before, but the same approach isn't working for me in watchkit...any idea why my second interface controller displays 0 (initialized value) instead of the numbers entered in the first interface controller?

class Singleton {

 static let instance = Singleton()

var salesPriceAsInt: Int = 0

}

    import WatchKit
import Foundation


class InterfaceController: WKInterfaceController {

    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)

        // Configure interface objects here.
    }

    var salesPrice = ""


    @IBOutlet weak var salesPriceLabel: WKInterfaceLabel!

    func addCharacter(char: String) {
        salesPrice += char
    }


    @IBAction func zeroButton() {
        addCharacter("0")
        salesPriceLabel.setText(salesPrice)
    }

    @IBAction func oneButton() {
         addCharacter("1")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func twoButton() {
        addCharacter("2")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func threeButton() {
          addCharacter("3")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func fourButton() {
          addCharacter("4")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func fiveButton() {
          addCharacter("5")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func sixButton() {
          addCharacter("6")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func sevenButton() {
          addCharacter("7")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func eightButton() {
          addCharacter("8")
         salesPriceLabel.setText(salesPrice)
    }

    @IBAction func nineButton() {
          addCharacter("9")
         salesPriceLabel.setText(salesPrice)
    }


    @IBAction func segueButton() {
          Singleton.instance.salesPriceAsInt = salesPrice.toInt()!
          salesPriceLabel.setText("\(Singleton.instance.salesPriceAsInt)")
    }

import WatchKit
import Foundation


class SecondPageInterfaceController: WKInterfaceController {



    @IBOutlet weak var totalSaleCommissionLabel: WKInterfaceLabel!


    override func awakeWithContext(context: AnyObject?) {
        super.awakeWithContext(context)

    }

    @IBAction func secondPageButton() {
        totalSaleCommissionLabel.setText("\(Singleton.instance.salesPriceAsInt)")

    }







    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()

    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()

    }

Upvotes: 1

Views: 404

Answers (1)

GarySabo
GarySabo

Reputation: 6700

Turns out the Singleton works, what doesn't is enabling a button to both (1) store to the Singleton and (2) segue to my 2nd interface controller. To get around this I moved

Singleton.instance.salesPriceAsInt = salesPrice.toInt()!

to the didActivate method

Upvotes: 1

Related Questions