【问题标题】:Application crash after updated to IOS7升级到IOS7后应用崩溃
【发布时间】:2013-11-04 13:54:56
【问题描述】:

我已将我的应用更新到 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 中运行良好。

【问题讨论】:

  • 添加异常断点并查看是否在代码中获取异常位置。并添加代码。还要提及您是否使用用于通知和跟踪的外部库/框架??
  • 发布你的一些代码。
  • 我添加了异常断点,但它不会在任何地方停止。但我认为我发现了一些东西。我认为这个问题与自动布局有关。因为应用程序仅在未检查自动布局的视图上崩溃(我手动检测方向)。但仍在努力寻找解决方案。我不知道为什么会这样。

标签: ios iphone objective-c ios7 nsexception


【解决方案1】:

为了确定,我必须在真机上进行测试。
我有一段代码每 X 秒刷新一次视图中的一些标签。
它工作正常,直到 IOS7。在 IOS7 应用程序在 3 分钟后崩溃,我从问题中得到错误。
每次我在视图中刷新标签时,都会打开一个与 sqlite 的新连接以获取数据。
在 IOS7 中出现错误,因此我创建了一个数据访问类实例并仅在 viewDidLoad() 中对其进行了初始化,现在它可以正常工作了。
如果经过测试我确认我是对的,我肯定会为我的数据访问类制作单例模式。

【讨论】:

    【解决方案2】:

    在 Xcode 中创建一个在所有异常处停止的异常断点。然后调试器将在引发该异常时停止。好像是在

    [UINib instantiateWithOwner:options:]
    

    但我不知道你是在调用它还是调用系统。

    有关相关问题,请参见此处: Terminating app due to uncaught exception 'NSUnknownKeyException'

    【讨论】:

    • 系统调用的那个。所以如果是这样,那么苹果就搞砸了大风格
    • [UINib instantiateWithOwner:options:] 是开发人员无法调用的东西。此错误与该方法无关,如果确实如此,则需要向苹果报告,但由于它是一个非常重要的方法,经常被调用,我怀疑如果它有任何问题,它已经被报告了。
    • 我并不是说开发人员正在调用该方法。正如您在跟踪中看到的那样,该方法只是引发异常的方法。 Apple 可能很好地实现了,以警告开发人员有关开发人员所做的事情,例如指定错误的所有者,或者可能没有所有者。系统方法可以引发异常,为此,它们不需要由开发人员调用,但是异常的触发器可以在开发人员代码中。另外:stackoverflow.com/questions/8232766/…
    • 这只发生在一个视图上。我检查了所有 IBOutlets 都很好:(
    • 您是否按照我的建议添加了断点?然后调试器将在抛出异常时停止,您可以返回。
    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多