首先让我对所有代码表示抱歉....我想确保我包含了大部分代码,以便您可以查看我是否做错了什么。我的游戏有应用内购买来解锁关卡。当我去购买 2 级时,它工作得很好,但是当我退出应用程序并返回时,应用程序购买中的 2 级消失了。为什么会这样?我不知道为什么它不保存应用程序内购买是否有人看到代码有任何问题。如果您不明白我在说什么,请告诉我,我会尽力解释得更好。谢谢!
编辑:
override func didMoveToView(view: SKView) {
if unlockLeavel2 {
let unlockLeavel2 = NSUserDefaults().boolForKey("Leavel2")
unlockLevelTwo()
}
}
func unlockLevelTwo() {
let fadeIn = SKAction.fadeInWithDuration(1.0)
levelTwo.position = CGPointMake(self.size.width / 2.0, self.size.height / 2.2)
levelTwo.zPosition = 20
levelTwo.setScale(0.8)
levelTwo.alpha = 0
levelTwo.hidden = false
levelTwo.runAction(fadeIn)
levelTwo.name = "leveltwo"
addChild(levelTwo)
}
func unlockLevel() {
if SKPaymentQueue.canMakePayments() {
var productID:NSSet = NSSet(object: "unlockLevelTwo")
var productsRequest:SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
productsRequest.delegate = self
productsRequest.start()
println("Fetching products...")
}
else {
println("Can't make purchases")
}
}
func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {
println("Received Payment Transaction Response from Apple");
for transaction:AnyObject in transactions {
if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
switch trans.transactionState {
case .Purchased:
println("Product Purchased");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
NSUserDefaults().setBool(true, forKey: "Leavel2")
unlockLevelTwo()
break;
case .Failed:
println("Purchased Failed");
SKPaymentQueue.defaultQueue().finishTransaction(transaction as! SKPaymentTransaction)
break;
case .Restored:
println("Already Purchased");
SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
default:
break;
}
}
}
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
var touch: UITouch = touches.first as! UITouch
var location = touch.locationInNode(self)
var node = self.nodeAtPoint(location)
if node.name == "unlockleveltwobutton" {
if defaults.boolForKey("unlockthelevelTwo") == false {
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
runAction(menuAudioPlayer)
unlockLevel()
}
}
最佳答案
您的 unlockLevelTwo()
函数正在调整当前 session 中的游戏数据,数据不会在 session 之间保留。
为了保存该状态,您可以使用一些主要的函数 NSCoding
、NSUserDefaults
甚至 CoreData
来保存该游戏数据。
保存
let save = NSUserDefaults.standardUserDefaults()
save.setValue(yourVariable, forKey: "SomeUniqueKey")
save.synchronize() // makes ur data persist between sessions
加载
if let data = save.valueForKey("SomeUniqueKey") {
// some data here
}
else {
// got no data
}
关于ios - 为什么我无法保存应用内购买?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30634969/