raj*_*raj 30 objective-c ios7 xcode5
我正在使用后台任务在后台运行计时器来更新用户的位置.它被声明为:
UIBackgroundTaskIdentifier bgTask;
Run Code Online (Sandbox Code Playgroud)
在头文件中,并初始化为:
bgTask = UIBackgroundTaskInvalid;
Run Code Online (Sandbox Code Playgroud)
但是,我仍然在gdb中收到此消息:
无法endBackgroundTask:标识符23dc不存在后台任务,或者它可能已经结束.在UIApplicationEndBackgroundTaskError()中断以进行调试.
为什么?我该如何解决这个问题?
小智 30
我花了很多时间在调试控制台中寻找导致此警告的代码或框架。无法结束BackgroundTask:不存在标识符为2(0x2)的后台任务,或者它可能已经结束。中断UIApplicationEndBackgroundTaskError()以进行调试。
最后,我创建了一个空项目Single View App。仅由Xcode生成的代码,我在模拟器上运行该应用程序,将其置于后台,并且看到相同的警告。所以我可以说这是iOS 13问题。我希望苹果能够迅速修复它,因为在Crashlytics中,我发现了由它引起的应用崩溃。
Sal*_*tan 10
在Xcode中,切换到断点导航器(“视图”>“导航器”>“显示断点导航器”),然后按左下角的+按钮并选择“添加符号断点”,然后输入“ UIApplicationEndBackgroundTaskError”作为符号。
您需要设置bgTask = UIBackgroundTaskInvalid
一会儿
我相信您错过了这两个时刻中的任何一个,这就是为什么您会收到该错误。
请参阅苹果示例代码:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
bgTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
// Clean up any unfinished task business by marking where you
// stopped or ending the task outright.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Do the work associated with the task, preferably in chunks.
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
});
}
Run Code Online (Sandbox Code Playgroud)
链接:https: //developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html
转载,这是我的整个应用程序:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool
{
return true
}
}
Run Code Online (Sandbox Code Playgroud)
当我把它带到后台时,我得到了同样的信息。没有故事板或任何其他噪音。
您是否在后台使用位置更新?
如果是,在从用户获取位置信息授权的时候添加下面的代码-苹果改变了默认为allowsBackgroundLocationUpdates以NO从iOS的9起。
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) {
locationManager.allowsBackgroundLocationUpdates = YES;
}
Run Code Online (Sandbox Code Playgroud)
请确保您在项目“签名和功能”下为后台模式激活了“位置更新”。否则会崩溃。
| 归档时间: |
|
| 查看次数: |
23836 次 |
| 最近记录: |