[通过modalView购买应用内商品后如何重新加载数据

问题描述 投票:1回答:1

我查看了不同的来源来找到答案,并且可能尝试了几种方法reloadData(),但到目前为止还没有运气。

这是我的情况:

我有一个tabBar,在其中将内容显示在tableView中。当您进入该选项卡时,如果您尚未购买内容,我将显示一个模式视图。

enter image description here假设您已经购买了内容。模态视图会自行关闭,但tableview不会显示任何内容,除非您终止应用程序并再次运行。当您这样做时,tableView会自动将其内容重新加载。没问题。但这绝对是有问题的,正因为如此,我确实失去了用户。

我确实使用这样的键跟踪购买情况:

private var hiddenStatus: Bool = UserDefaults.standard.bool(forKey:"purchaseStatus")

我在成功购买后将其设置为true,如下所示:

self.setNonConsumablePurchase(true)

最后是我在购买时检查密钥是否设置为“ true”的代码。我在viewDidLoad上调用它,但这没有意义,因为当用户触摸此tabBar项时已经调用了它。

if hiddenStatus == true {

    DispatchQueue.main.async(execute: {

        self.segmentioView.valueDidChange = { [weak self] _, segmentIndex in

            switch self?.segmentioView.selectedSegmentioIndex {
            case 0:
                self?.observeAugustProducts()
                self?.tableView.reloadData()
            case 1:
                self?.observeSeptemberProducts()
                self?.tableView.reloadData()
            default:
                self?.tableView.reloadData()
            }
        }
    })
 }

所以我正在寻找两件事:

1-保留所有内容并调整代码以使其正常工作。

2-为用户提供更好的应用内购买体验的替代想法(我曾经使用UIAlertViewController进行应用内购买,但决定不使用它)

ios swift in-app-purchase tableview
1个回答
0
投票

我建议使用此扩展名:

extension NotificationCenter {
    func setUniqueObserver(_ observer: AnyObject, selector: Selector, name: NSNotification.Name, object: AnyObject?) {
        NotificationCenter.default.removeObserver(observer, name: name, object: object)
        NotificationCenter.default.addObserver(observer, selector: selector, name: name, object: object)
    }
}

解散模态视图之前,请让模态视图的ViewController发布通知。

类似:

NotificationCenter.default.post(name: "Purchased", object: nil)

然后让您的TableView的ViewController注册以监听该通知(在viewWillAppear中)并进行处理。

类似:

NotificationCenter.default.setUniqueObserver(self, selector: #selector(handlePurchased), name: "Purchased", object: nil)

@objc func handlePurchased() {
    // Reload your TableView, etc.
}
© www.soinside.com 2019 - 2024. All rights reserved.