【问题标题】:Background fetch calling once ios7ios7后台获取调用一次
【发布时间】:2014-02-27 07:31:15
【问题描述】:

这是我在 SO 中的第一个问题,如果我没有遵循任何准则,请见谅。

我正在我的旧应用程序中实现 ios7 后台提取。但唯一的问题是我必须在 xcode 中模拟位置。 我已经实现了http://www.objc.io/issue-5/multitasking.html 中的代码。

我的问题是—— 1)这会在设备上定期调用(比如说30秒)吗? 2) 我是否需要始终模拟后台获取以在设备上进行测试?

【问题讨论】:

    标签: ios objective-c ios7 background-process multitasking


    【解决方案1】:

    您应该使用模拟后台提取功能来验证在后台提取时执行的逻辑。即获取任何代码。

    您必须设置最小提取间隔。通常,您会将其设置为 UIApplicationBackgroundFetchIntervalMinimum 以在允许的情况下经常获取:

    你可以这样设置:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    
        return YES;
    }
    

    默认值为 UIApplicationBackgroundFetchIntervalNever,因此如果您在启动时未能设置该值,您的应用将永远不会被唤醒以执行后台提取。您提供的值是两次唤醒之间的最小秒数;但是请注意,该值只是建议性的——您的应用程序可能会更少或更频繁地执行获取。

    设置 UIApplicationBackgroundFetchIntervalMinimum 将确保您的应用程序被尽可能频繁地调用,但实际上系统将最终决定。


    source

    【讨论】:

    • john:我已经实现并完成了你在代码中告诉我的任何事情,并在 ios7 设备上安装了应用程序,但看起来它没有调用 web 服务 :( 。任何建议都会很明显。
    • 跟随本教程,(阅读全部)code.tutsplus.com/tutorials/…
    • 关键是 - ios 会定期调用后台 fetch 方法,但不会在特定时间间隔内调用 :) 谢谢 john
    • @MarcusAdams 什么?我没有抄袭任何东西。我链接到同一个教程。
    【解决方案2】:

    你可以在 performFetchWithCompletionHandler 中使用 NSTimer:

        var time = NSTimer.scheduledTimerWithTimeInterval(callTime , target: self, selector: #selector(self.notific), userInfo: nil, repeats: true)
    
        completionHandler(.NewData)
    

    并将其放入 didFinishLaunchingWithOptions 中:

        application.setMinimumBackgroundFetchInterval(UIApplicationBackgroundFetchIntervalMinimum)
    

    NSTimer 会在你想要的每个 callTime 调用你的函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多