升级到iOS7后应用程序崩溃。
升级到iOS7后应用程序崩溃。
我已经将我的应用程序更新到IOS7,现在我遇到了一个非常奇怪的问题。
当我启动应用程序时,它开始执行它应该执行的操作,但是在3-5分钟后应用程序停止工作。
但不完全停止。它停止发送通知,跟踪位置等。
如果我尝试执行某些操作,控制台会显示以下内容:
*** First throw call stack: ( 0 CoreFoundation 0x0305f5e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x0276e8b6 objc_exception_throw + 44 2 CoreFoundation 0x0305f3bb +[NSException raise:format:] + 139 3 UIKit 0x0157465c -[UINib instantiateWithOwner:options:] + 951 4 UIKit 0x013e6c95 -[UIViewController _loadViewFromNibNamed:bundle:] + 280 5 UIKit 0x013e743d -[UIViewController loadView] + 302 6 UIKit 0x013e773e -[UIViewController loadViewIfRequired] + 78 7 UIKit 0x0140d1a5 -[UINavigationController _layoutViewController:] + 39 8 UIKit 0x0140d6bb -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 235 9 UIKit 0x0140d7b3 -[UINavigationController _startTransition:fromViewController:toViewController:] + 78 10 UIKit 0x0140e72c -[UINavigationController _startDeferredTransitionIfNeeded:] + 645 11 UIKit 0x0140f349 -[UINavigationController __viewWillLayoutSubviews] + 57 12 UIKit 0x0154839d -[UILayoutContainerView layoutSubviews] + 213 13 UIKit 0x0cf0656f -[UILayoutContainerViewAccessibility(SafeCategory) layoutSubviews] + 50 14 UIKit 0x0133edd7 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355 15 libobjc.A.dylib 0x0278081f -[NSObject performSelector:withObject:] + 70 16 QuartzCore 0x00ef972a -[CALayer layoutSublayers] + 148 17 QuartzCore 0x00eed514 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380 18 QuartzCore 0x00eed380 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26 19 QuartzCore 0x00e55156 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294 20 QuartzCore 0x00e564e1 _ZN2CA11Transaction6commitEv + 393 21 QuartzCore 0x00f12870 +[CATransaction flush] + 52 22 UIKit 0x012f0979 _afterCACommitHandler + 131 23 CoreFoundation 0x0302753e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30 24 CoreFoundation 0x0302748f __CFRunLoopDoObservers + 399 25 CoreFoundation 0x030053b4 __CFRunLoopRun + 1076 26 CoreFoundation 0x03004b33 CFRunLoopRunSpecific + 467 27 CoreFoundation 0x0300494b CFRunLoopRunInMode + 123 28 GraphicsServices 0x03ce89d7 GSEventRunModal + 192 29 GraphicsServices 0x03ce87fe GSEventRun + 104 30 UIKit 0x012d494b UIApplicationMain + 1225 31 MyApp 0x0000759d main + 141 32 libdyld.dylib 0x02c53725 start + 0 33 ??? 0x00000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException
你有什么想法这是什么问题吗?
在IOS6上应用程序运行良好。
应用在更新到IOS7后崩溃了,出现这个问题的原因是每次刷新视图中的标签时,都会打开一个新的连接到sqlite来获取数据。在IOS7中,这样做会导致错误,所以我将数据访问类的实例化放在了viewDidLoad()方法中,现在它可以正常工作了。如果经过测试确认我是正确的,我将确保我的数据访问类是单例模式。
// 在viewDidLoad()方法中实例化数据访问类
- (void)viewDidLoad {
[super viewDidLoad];
DataAccessClass *dataAccess = [[DataAccessClass alloc] init];
}
// 刷新视图中的标签
- (void)refreshLabels {
// 打开sqlite连接获取数据
DataAccessClass *dataAccess = [[DataAccessClass alloc] init];
// 刷新标签
// ...
// 关闭sqlite连接
}
应用在更新到IOS7后崩溃的问题出现的原因可能是由于系统中的[UINib instantiateWithOwner:options:]方法引发了异常。这个方法是系统调用的,如果是这个方法引发了异常,那么苹果可能出现了严重的错误。但是,这个错误与该方法无关,如果与该方法有关,那么应该已经向苹果报告了。这个方法仅仅是引发异常的方法,可能是开发者代码中的某个触发点导致了异常。这个问题只发生在一个视图上,检查了所有的IBOutlets都没有问题。建议创建一个异常断点,在异常被引发时调试器会停止,然后可以逐步排查问题。在调试器中查看了异常的堆栈,发现应该是在3分钟后无法访问本地sqlite数据库导致的。当试图打开需要访问数据库的另一个视图时,应用程序崩溃了。