Ios 重新打开应用程序时有关API进程的问题
我是Swift新手,当我重新打开应用程序时,我无法在主页上恢复API提取过程。当用户没有注销并关闭应用程序时,他们将在重新打开我的应用程序时立即直接进入主页。但从我的控制台输出检查来看,重新打开API时,整个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
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(:)
视为一次“处理好您的事务”的机会,以保存您的应用程序状态,以便在终止时恢复它