gpt4 book ai didi

ios - 在应用程序重新加载之前,不会刷新用于增加 UserDefault 值的 Swift In App Purchase

转载 作者:行者123 更新时间:2023-11-28 15:43:27 25 4
gpt4 key购买 nike

用户可以选择购买“硬币”,然后可以使用这些硬币购买不同类型的车辆以在游戏中使用。

这是应用内购买金币的代码:

func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {

for transaction in transactions {

switch (transaction.transactionState) {

case .purchased:
SKPaymentQueue.default().finishTransaction(transaction)
print("Purchased")

let oldCoin = UserDefaults.standard.integer(forKey: "COINSCORE")
let newCoin = oldCoin + 500

UserDefaults.standard.set(newCoin, forKey: "COINSCORE")
UserDefaults.standard.synchronize()
coinLabel.removeFromParent()
createCoinScore()

// apply purchased here and store info in userDefaults
case .failed:
SKPaymentQueue.default().finishTransaction(transaction)
print("Failed")
default:
break

}
}
}

此次购买运作良好,购买完成后 coinScore 会增加。

问题是,当 coinScore 足以让玩家购买车辆时,它似乎不会记录增加的 coinScore,直到通过重新加载应用程序或更改场景并返回来加载 View 之后。

coinScore 作为变量添加如下:

    var coinScore = UserDefaults().integer(forKey: "COINSCORE")

这是允许玩家购买车辆的代码:

 if(atPoint(location) == greyship2){

if coinScore > 20 {
let oldValue = UserDefaults.standard.integer(forKey: "COINSCORE")
let newValue = oldValue - 20

UserDefaults.standard.set(newValue, forKey: "COINSCORE")
UserDefaults.standard.set(true, forKey: "ship2")
UserDefaults.standard.synchronize()

coinLabel.removeFromParent()
coinImage1.removeFromParent()
coinLabel1.removeFromParent()

createCoinScore()



greyship2.setScale(0)
greyship2.removeFromParent()

let ship2Texture = SKTexture(imageNamed: "ship2.png")
ship2 = SKSpriteNode(texture: ship2Texture)
ship2.position = CGPoint(x: self.frame.midX - 150, y: self.frame.midY)
ship2.setScale(1)
self.addChild(ship2)
break //finish the touchesbegan call
}

购买后,尽管 View 中显示的 coinScore 值会立即更新,但在应用程序刷新之前,用户无法单击 greyShip2 进行购买。

最佳答案

很高兴您找到了解决方案。我只想建议一种更好的读取和写入 UserDefaults 的方法。

    var <anyVariableName>: String!{
get {
var value = ""
if NSUserDefaults.standardUserDefaults().valueForKey( UserDefaultsKey.USER_ID_STORED) != nil {
value = NSUserDefaults.standardUserDefaults().valueForKey( UserDefaultsKey.USER_ID_STORED) as! String
}
return value
}

set(value) {
NSUserDefaults.standardUserDefaults().setValue(value, forKey: UserDefaultsKey.USER_ID_STORED)
}

}

这样就省去了每次读取和写入时创建 UserDefaults 实例的麻烦。您现在可以直接访问这个变量来读取和写入它。希望这对您有帮助

关于ios - 在应用程序重新加载之前,不会刷新用于增加 UserDefault 值的 Swift In App Purchase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43420989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com