Ios 重新打开应用程序时有关API进程的问题

Ios 重新打开应用程序时有关API进程的问题,ios,swift,xcode,Ios,Swift,Xcode,我是Swift新手,当我重新打开应用程序时,我无法在主页上恢复API提取过程。当用户没有注销并关闭应用程序时,他们将在重新打开我的应用程序时立即直接进入主页。但从我的控制台输出检查来看,重新打开API时,整个API提取过程不会恢复。这是我的主页类: import UIKit import UserNotifications import Alamofire import SwiftyJSON import AVFoundation class HomePageViewController: U

我是Swift新手,当我重新打开应用程序时,我无法在主页上恢复API提取过程。当用户没有注销并关闭应用程序时,他们将在重新打开我的应用程序时立即直接进入主页。但从我的控制台输出检查来看,重新打开API时,整个API提取过程不会恢复。这是我的主页类:

import UIKit
import UserNotifications
import Alamofire
import SwiftyJSON
import AVFoundation

class HomePageViewController: UIViewController {


@IBOutlet weak var userName: UILabel!

let username = UserDefaults.standard.string(forKey: "userName")

override func viewDidLoad() {
    super.viewDidLoad()
    // notification create:
    userName.text = "Welcome! \(username ?? "")"
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .sound, .badge])
                {(granted, error) in
        // action
            }

    center.getNotificationSettings(completionHandler: { settings in
        if(settings.authorizationStatus == .denied || settings.authorizationStatus == .notDetermined){
            self.createAlert(title: " Notification required",
            message: "Your current notification is off, please turn it on in settings->IFTTT->Notification")
        }
    })
    getRequest()
    // Do any additional setup after loading the view.
}

// the function that get Request from the API
func getRequest(){
    
    let params: [String:Any] = ["username": username]
    // print(MyVariables.username)
    AF.request("url", method: .post, parameters: params, encoding: JSONEncoding.default)
                .responseJSON { (response) in
                    do{
                        print(String(data: response.data!, encoding: .utf8))
                        let json = try JSON(data: response.data!)
                        var flag: Bool = false
                        var countor: Int = 1
                        // if it has trigger pulling:
                        var info:String = ""
                        // parse JSON
                        while json[String(countor)]["message"].stringValue != ""{
                            print("reached")
                            flag = true
                            info += json[String(countor)]["condition"].stringValue + " message: "
                            info += json[String(countor)]["message"].stringValue
                            if(json[String(countor + 1)]["message"].stringValue != ""){
                                countor += 1
                                info += "\n"
                            } else {
                                break
                            }
                            
                        }
                        
                        
                        if(flag){
                            // sound:
                            let systemSoundID: SystemSoundID = 1000
                            // to play sound
                            AudioServicesPlaySystemSound (systemSoundID)
                            // send alert window:
                            self.createAlert(title: " trigger(s) pulled",
                                             message: "You have \(countor) triggers pulled: \n \(info)")
                            // reinitialize flag back to false
                            flag = false
                        }

                    } catch let jsonErr{
                        print(jsonErr)
                    }
                    
                    // Trigger a new request 5s after the response
                    DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: { [weak self] in
                        self?.getRequest()
                    })
                }
}

func createAlert(title: String, message: String){
    let Alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)
    Alert.addAction(UIAlertAction(title: "ok", style: UIAlertAction.Style.default, handler: { (action) in
        Alert.dismiss(animated: true, completion: nil)
    }))
    self.present(Alert, animated: true, completion: nil)
}

}
我的控制台一直在发送
print(字符串(数据:response.data!,编码:.utf8))
的输出,但是在我重新打开它之后,它没有继续发送它,所以我假设它在重新打开后无法执行getRequest()以循环API拉取


有人能帮我吗?谢谢大家!

如果您的用户在应用程序运行时切换到springboard(桌面),您将获得几秒钟的后台时间,然后会收到一个通知,通知您将被暂停。(您的应用程序代理的
应用程序将被调用resignactive(:)
方法。)此时您将无法获得更多的处理时间,并且您的应用程序可以在此后的任何时间终止,而不会发出任何警告。当用户切换回您的应用程序时,它可能仍在内存中,或者可能已被终止。如果它仍在内存中,它将获得一个恢复事件,并且您的所有应用程序状态仍然存在

请注意,在异常情况下,可能会收到
willTerminateNotification
消息,而不是调用
应用程序WillResignative(:)
,但在最新版本的iOS中,通常不会收到
willTerminateNotification

如果它被终止,用户下次切换回你的应用程序时,你将得到一个冷启动应用程序。在这种情况下,你的应用程序并没有自动恢复的机制。你必须自己建造

您应该将调用
applicationWillResignActive(:)
视为一次“处理好您的事务”的机会,以保存您的应用程序状态,以便在终止时恢复它