iOS重新启动后台任务未完成

时间:2017-03-28 12:04:14

标签: ios swift core-data location magicalrecord

当我的应用程序被杀时,我遇到了位置问题(CLVisit)。我总是请求位置,当我测试它时,一切似乎都很好。

我在didVisit委托方法中创建了一些CoreData对象(使用MagicalRecord),当我调试它时(app是前台或后台),创建工作正常,当我在委托中添加一些本地通知并使用app测试它时已杀死,但删除通知时无效。

我甚至尝试禁用automaticTermination和suddenTermination,但它不起作用。

以下是didVisit函数中的代码示例:

func locationManager(_ manager: CLLocationManager, didVisit visit: CLVisit) {
    let activity = ProcessInfo.processInfo.beginActivity(options: [.suddenTerminationDisabled, .automaticTerminationDisabled], reason: "Saving location data")

    MagicalRecord.save({ (context) inUIApplication.shared.scheduleLocalNotification(notification)
        let newVisit = Visit.mr_createEntity(in: context)
        if let newVisit = newVisit {
            newVisit.accuracy = visit.horizontalAccuracy as NSNumber?
            newVisit.latitude = visit.coordinate.latitude as NSNumber?
            newVisit.longitude = visit.coordinate.longitude as NSNumber?
            newVisit.arrivalTime = visit.arrivalDate as NSDate?
            newVisit.departureTime = visit.departureDate as NSDate?
            newVisit.address = addressString
            let formatter = DateFormatter()
            formatter.dateStyle = .medium
            formatter.timeStyle = .medium
            newVisit.arrivalTimeString = formatter.string(from: newVisit.arrivalTime as! Date)
            newVisit.departureTimeString = formatter.string(from: newVisit.departureTime as! Date)
        }
    }, completion: { (bool, error) in
        ProcessInfo.processInfo.endActivity(activity)UIApplication.shared.scheduleLocalNotification(notification)
    })
}

if语句还有一些代码行,但这几乎就是我所做的,有时我会创建2个条目,但它的工作方式相同。当我在此代码中添加用于调试目的的通知时,一切正常

我有一些问题:我的问题可能是委托方法中的任务didVisit太长了(我已经把它减少到最小)?为什么它适用于本地通知,没有它们? MagicalRecord可以正常使用并通过位置触发器杀死和启动吗?

0 个答案:

没有答案