【发布时间】:2014-06-19 06:17:12
【问题描述】:
在我的应用程序中,我想使用 iOS 7 后台获取功能向服务器发送一些数据。我还在目标的功能部分中选中了后台获取复选框(当然还有一个自动添加到 plist 中的标志)。
在 AppDelegate 中我这样做了:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[application setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
//[application setMinimumBackgroundFetchInterval:10]; also tried this
return YES;
}
然后在委托方法中我这样做了:
-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
LocationManager = [[CLLocationManager alloc] init];
LocationManager.delegate = self;
LocationManager.desiredAccuracy = kCLLocationAccuracyBest;
LocationManager.distanceFilter = 50.0;
[LocationManager startUpdatingLocation];
/** NEW DATA EXISTS AND WAS SUCCESSFULLY PROCESSED **/
if (YES) {
completionHandler(UIBackgroundFetchResultNewData);
}
else
completionHandler(UIBackgroundFetchResultFailed);
}
然后我将我的 iPhone 连接到 XCode 并运行应用程序,然后从调试菜单中单击模拟后台获取。委托方法被调用并且位置在服务器上更新了一次,但它再也没有发生过,系统永远不会在后台唤醒应用程序。 我做错了什么?任何帮助将不胜感激。
编辑: 是否可以使用后台获取在服务器上发送数据? Edit-2 如果我使用远程通知代替后台获取以在服务器上发送数据,那么在这种情况下,是否保证系统在收到远程通知后会唤醒我的应用程序?
【问题讨论】:
-
在做出任何决定之前,请通过@walle84 答案下的 cmets。
-
请注意,
Simulate Background Fetch在 Xcode 6 中已损坏(已在 6.3.1 中验证不工作),并在 Xcode 6 发行说明的“已知问题”部分中提到。 Other threadRelease Notes
标签: ios objective-c cllocationmanager ios7.1