ios在后台模式下调用功能

时间:2016-01-13 16:32:11

标签: ios swift alamofire uiapplication

我的应用程序在后台运行,我想每隔60秒从Web服务器获取html数据。 (使用alamofire或nsurlconnection等..)但我找不到与之关联的示例代码。有可能做这样的事情。我想要做的每一分钟都会更新。

在后台运行的应用程序,我想每隔60秒调用一次updateServer函数

注意:背景提取methot每分钟都不起作用。     func应用程序(应用程序:UIApplication,performFetchWithCompletionHandler completionHandler:(UIBackgroundFetchResult) - > Void) 此功能在3分钟后不在后台模式下调用

    func updateServer() {
    self.requesti =  request(.POST, "http://www.myserver.com/deerer.aspx"
        .response { request, response, data, error in
            let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)

            .......

            let alis = scanned as! String
            let satis = scanned as! String
            self.addDataBase(alis, satis: satis)
    }
}
func addDataBase(alis: String, satis: String) {
    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
    let kur  = NSEntityDescription.insertNewObjectForEntityForName("Kur", inManagedObjectContext: appDelegate.managedObjectContext) as! Entity

    kur.alis = alis
    kur.satis = satis
    kur.tarih = NSDate()

    appDelegate.saveContext()

    let notification = UILocalNotification()
    notification.alertBody = "testtesttest"
    notification.fireDate = NSDate(timeIntervalSinceNow: 1)
    notification.soundName = UILocalNotificationDefaultSoundName
    UIApplication.sharedApplication().scheduleLocalNotification(notification)
}

1 个答案:

答案 0 :(得分:1)

有一个关于在后台运行任务的好教程http://www.raywenderlich.com/92428/background-modes-ios-swift-tutorial

这是我刚刚测试过的片段,看起来效果很好。这个只是试图下载一个网页并在标签中显示html,但它应该显示重要的位!

class ViewController: UIViewController
{
    var bDataLoaded : Bool = false
    var bTimerRunning : Bool = false

    var backgroundTask: UIBackgroundTaskIdentifier = UIBackgroundTaskInvalid
    var updateTimer = NSTimer()

    @IBOutlet weak var lblLabel1: UILabel!

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

    @IBAction func cmdButton(sender: AnyObject)
    {
        tryToDownload()
    }

    func tryToDownload()
    {
        if bDataLoaded
        {
            return
        }

        var html: NSString = ""
        do
        {
            html = try NSString(contentsOfURL: NSURL(string: "http://www.myserver.com/deerer.aspx")!, encoding: NSUTF8StringEncoding)
        }
        catch _
        {
            print("Still nothing - try again")
            updateTimer = NSTimer.scheduledTimerWithTimeInterval(60, target: self,
                selector: "tryToDownload", userInfo: nil, repeats: true)
            registerBackgroundTask()

            bTimerRunning = true
        }

        if html != ""
        {
            lblLabel1.text = html as String
            bDataLoaded = true
            endBackgroundTask()
        }
    }

    func registerBackgroundTask() {
    backgroundTask = UIApplication.sharedApplication().beginBackgroundTaskWithExpirationHandler {
        [unowned self] in
            self.endBackgroundTask()
        }
        assert(backgroundTask != UIBackgroundTaskInvalid)
    }

    func endBackgroundTask() {
        NSLog("Background task ended.")
        UIApplication.sharedApplication().endBackgroundTask(backgroundTask)
        backgroundTask = UIBackgroundTaskInvalid
    }
}