Reputation: 6700
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
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