Iphone 当应用程序处于后台时,日历的requestAccessToEntityType被停用时崩溃

Iphone 当应用程序处于后台时,日历的requestAccessToEntityType被停用时崩溃,iphone,calendar,ios6,Iphone,Calendar,Ios6,我的应用程序需要访问设备上的日历数据库。对于ios6,我在应用程序首次运行时请求许可,如果允许,一切正常。但是,如果应用程序位于后台,并且用户去关闭应用程序的权限,我的代码就会崩溃,并跳转到主循环并在以下位置停止: return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 有没有办法解决这个问题 谢谢 雷扎 进一步补充: 这是崩溃的堆栈跟踪 Thread 1, Queue : com.a

我的应用程序需要访问设备上的日历数据库。对于ios6,我在应用程序首次运行时请求许可,如果允许,一切正常。但是,如果应用程序位于后台,并且用户去关闭应用程序的权限,我的代码就会崩溃,并跳转到主循环并在以下位置停止:

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
有没有办法解决这个问题

谢谢

雷扎

进一步补充:

这是崩溃的堆栈跟踪

Thread 1, Queue : com.apple.main-thread
#0  0x33269eb4 in mach_msg_trap ()
#1  0x3326a04c in mach_msg ()
#2  0x3525a6c6 in _GSSendEvent ()
#3  0x35259510 in GSSendEvent ()
#4  0x370e9f28 in _sendPendingApplicationSuspendEvent ()
#5  0x370e34aa in _UIApplicationHandleEvent ()
#6  0x3525b5a2 in _PurpleEventCallback ()
#7  0x3525b1d2 in PurpleEventCallback ()
#8  0x34580172 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ ()
#9  0x34580116 in __CFRunLoopDoSource1 ()
#10 0x3457ef98 in __CFRunLoopRun ()
#11 0x344f1ebc in CFRunLoopRunSpecific ()
#12 0x344f1d48 in CFRunLoopRunInMode ()
#13 0x3525a2ea in GSEventRunModal ()
#14 0x37137300 in UIApplicationMain ()
#15 0x000aede4 in main at /Users/..../appName/main.m:16

Thread 3, Queue : com.apple.libdispatch-manager
#0  0x3326a648 in kevent64 ()
#1  0x389934f0 in _dispatch_mgr_invoke ()
#2  0x38985df8 in _dispatch_mgr_thread$VARIANT$up ()

Thread 4, Queue : (null)
#0  0x3327ad98 in __workq_kernreturn ()
#1  0x3862ccfa in _pthread_workq_return ()
#2  0x3862ca16 in _pthread_wqthread ()
#3  0x3862c8a4 in start_wqthread ()

Thread 5 WebThread, Queue : (null)
#0  0x33269eb4 in mach_msg_trap ()
#1  0x3326a04c in mach_msg ()
#2  0x34580044 in __CFRunLoopServiceMachPort ()
#3  0x3457eda2 in __CFRunLoopRun ()
#4  0x344f1ebc in CFRunLoopRunSpecific ()
#5  0x344f1d48 in CFRunLoopRunInMode ()
#6  0x352d5a74 in RunWebThread(void*) ()
#7  0x38637310 in _pthread_start ()
#8  0x386371d8 in thread_start ()

Thread 9, Queue : (null)
#0  0x3327ad98 in __workq_kernreturn ()
#1  0x3862ccfa in _pthread_workq_return ()
#2  0x3862ca16 in _pthread_wqthread ()
#3  0x3862c8a4 in start_wqthread ()

Thread 10, Queue : (null)
#0  0x3327ad98 in __workq_kernreturn ()
#1  0x3862ccfa in _pthread_workq_return ()
#2  0x3862ca16 in _pthread_wqthread ()
#3  0x3862c8a4 in start_wqthread ()

如果我在调试过程中更改相应的设置,我也会遇到同样的问题

虽然我认为既然我们收到了SIGKILL(不是SIGABRT),这意味着这是预期的行为


基本上,操作系统中发生了一些变化,所有依赖于这些变化的应用程序都应该重新启动。至少我是这样看的。

实际上,堆栈跟踪的信息要多得多。查看Xcode并发布。发送DTS请求后,我得到了相同的答案。当你的应用程序进入后台时,它应该保存它的所有状态,并做好被杀死的准备。现在,当有人关闭对日历的访问时,系统最简单的处理方法就是关闭你的应用程序,这就是正在发生的事情。雷扎