Мой обработчик завершения для моей пользовательской функции не выполняется должным образом?

100
12

У меня есть приложение, в котором при запуске оно проверяет, действительна ли пользовательская подписка или нет. В зависимости от полученного сетевого вызова/ответа отображается соответствующий UIViewController. Однако, мой обработчик завершения для 'checkSubscriptionStatus', похоже, не выполняется после завершения предыдущей функции. Пожалуйста, кто-нибудь может посоветовать?

class AppDelegate: UIResponder, UIApplicationDelegate {

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// EXECUTING FUNCTION WITH COMPLETION HANDLER
iapObserver.checkSubscriptionStatus(userId: USERID) {

let isActiveAccount = UserDefaults.standard.string(forKey: "subScriptionStatus")
print("didFinishLaunchingWithOptions.isActiveAccount: \(isActiveAccount)")

if let isActive = isActiveAccount{

if isActive == "1"{
print("SHOW SIGN UP")
// USER SUBSCRIIPTION UP-TO-DATE
let homeVC = storyBoard.instantiateViewController(withIdentifier: "home") as! HomeViewController
self.window?.rootViewController = homeVC
}else if isActive == "2"{
print("SHOW RENEW SUBSCRIPTION")
// SUBSCRIPTION ACCOUNT EXPIRED
let renewSubscriptionVC = storyBoard.instantiateViewController(withIdentifier: "renewsubvc") as! RenewSubscriptionViewController
self.window?.rootViewController = renewSubscriptionVC
}else{
// USER HAS NEVER SUBSCRIBED
print("SHOW CONTINUE AND PURCHASE SUBSCRIPTION")
let renewSubscriptionVC = storyBoard.instantiateViewController(withIdentifier: "purchaseSubVc") as! ConfirmInAppPurchase
}
}else{
print("isActive is nil: ")
}
}
}
}

import Foundation
import Alamofire

class StoreObserver: NSObject, SKPaymentTransactionObserver {

// CUSTOM FUNCTION WITH COMPLETION HANDLER
func checkRegistration(userId: String, completion:()-> Void){

let param: [String:String] = ["checkSubscription":"status"]
Alamofire.request(RECEIPT_URL, method: .post, parameters: param).responseJSON { response in
if let json = response.result.value{
print("checkSubscriptionStatus response json: \(json)")
guard
let jsonObject = json as? [String:Any],
let isSubscribed = jsonObject["isSubscribed"] as? Int else{return}

if isSubscribed == 1{
// SUBSCRIPTION UP TO DATE
// STORE ACTIVE ACCOUNT AS KEY VALUE PAIR
UserDefaults.standard.set("1", forKey: "subScriptionStatus")

}else if isSubscribed == 2{
// SUBSCRIPTION EXPIRED. ALLOW USER OPTION TO RENEW SUBSCRIPTION
UserDefaults.standard.set("2", forKey: "subScriptionStatus")

}else{
// USER HAS NEVER SUBSCRIBED TO SERVICE
UserDefaults.standard.set("0", forKey: "subScriptionStatus")
}
}
}
}

}

ПРИСТАВКА:

didFinishLaunchingWithOptions.isActiveAccount: Optional("2")
SHOW RENEW SUBSCRIPTION
checkSubscriptionStatus response json: { // This should have appeared before all the above
isSubscribed = 2;
}

спросил(а) 2021-01-25T12:21:00+03:00 5 месяцев назад
1
Решение
88

Я думаю, вы должны попробовать пометить обработчик завершения @escaping и/или вызвать его в конце вашей функции checkRegistration.

ответил(а) 2021-01-25T12:21:00+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема