SKProductsRequest不会在Swift 2中调用我的回调

时间:2016-08-14 20:33:43

标签: ios swift swift2 storekit

我按照不同的教程在Swift 2中的iOS应用中检索产品信息。但我无法使其有效: - /

我尽可能简单地编写以下代码,我只是调用requestProductsSimple方法,并且我希望调用productRequest()。运行前我有0错误和0警告。

但输出只显示:

request started

ended

几秒钟后我得到了一个EXEC_BAD_ACCESS。这是代码。我希望有人可以提供帮助。

谢谢:)

import UIKit
import StoreKit

class ViewController: UIViewController {

    @IBOutlet var mainView : UIView?

    override func loadView() {
        super.loadView()
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        let shop = IAPHelper()
        shop.requestProductsSimple()

        print("ended")

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}


class IAPHelper: NSObject, SKProductsRequestDelegate {

    override init() {

    }

    func requestProductsSimple() {

        let productIdentifiers: Set<String> = ["my_product_id"]
        let productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
        productsRequest.delegate = self
        productsRequest.start()

        print("request started")

    }

    func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {

        print("received")

    }

    func request(request: SKRequest, didFailWithError error: NSError) {

        print("request failed")

    }

}

1 个答案:

答案 0 :(得分:1)

由于您的shop是一个局部变量,因此viewDidLoad返回后会释放它。这是在异步操作完成之前,然后在尝试调用现在发布的完成方法时出现分段错误。

shop移至属性,以便在viewDidLoad返回后保留强引用