【问题标题】:How can I debug a crash being triggered by a CoreAnimation call from UIKit?如何调试由 UIKit 的 CoreAnimation 调用触发的崩溃?
【发布时间】:2012-07-20 20:23:13
【问题描述】:

我正在创建的一个 iOS 应用中有一些基本动画,它的表现一直很好......直到昨天。

我显然做了一个改变,不知何故影响了它,但我无法确定问题所在。

当单步执行代码时,它会到达这块代码,并在跨过 commitAnimation 行后死掉(我最初是在意识到 [UIView animateWithDuration: ...] 的美妙之前写的:

UIView *favoritesTabItemView = [appDelegate.tabBarController.tabBar viewWithTag:0];
CGPoint startingPoint = [[magazineView superview]
convertPoint:CGPointMake(magazineView.center.x, magazineView.center.y) toView:appDelegate.window.rootViewController.view];
CGPoint targetPoint = CGPointMake(favoritesTabItemView.center.x - 214.0, favoritesTabItemView.center.y);

//shrink the icon down
UIGraphicsBeginImageContextWithOptions(magazineView.bounds.size, NO, 0.0);
[magazineView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

[UIImageView beginAnimations:nil context:nil];
[UIImageView setAnimationDuration:0.1];
PublicationCoverImageReflectionView.alpha = 0.0;
[UIImageView commitAnimations];  //<-- crash happens after this line

我跨过 commitAnimation 后调试器的错误给我的帮助很少:

*** Terminating app due to uncaught exception 'NSRangeException', reason: 
'*** -[__NSArrayM objectAtIndex:]: index 9 beyond bounds [0 .. 8]'
*** First throw call stack:
(0x35c8b88f 0x31604259 0x35bd49db 0x126d5d 0x12e65f 0x349da6c9 0x34a66531 0x35c57547 0x35be3097 0x349da3eb 0x307a3a13 0x10f8ef 0x35be53fd 0x307a9faf 0x307a9f6b 0x307a9f49 0x307a9cb9 0x307aa5f1 0x307a8ad3 0x307a84c1 0x3078e83d 0x3078e0e3 0x3596122b 0x35c5f523 0x35c5f4c5 0x35c5e313 0x35be14a5 0x35be136d 0x35960439 0x307bce7d 0xbb109 0xbb0c8)
terminate called throwing an exception(lldb)

有谁知道这可能在谈论什么样的数组?这是一个 UIKit 调用,它正在死去,所以我认为该数组是 UIKit 使用的一些视图数组,但我看不到......

任何关于如何解决甚至进一步调查此问题的想法都会很棒!

【问题讨论】:

    标签: objective-c cocoa-touch cocoa uikit core-animation


    【解决方案1】:

    尝试将UIImageView 切换为UIView

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.1];
    PublicationCoverImageReflectionView.alpha = 0.0;
    [UIView commitAnimations];
    

    【讨论】:

      【解决方案2】:

      所以我发现了这个问题,它与 CoreAnimation 没有直接关系……尽管那是问题的征兆。

      我一直在调用一些块,但我的调试设置无法找出崩溃的位置。

      我四处寻找更多的调试帮助,其中最有帮助的问题是学习如何设置一个在异常发生时触发的断点。这帮助我准确地找到了它发生的地方。它在一个块内抛出异常,并且默认的调试器 GUI 没有给出任何指示......尽管在 Xcode 中使用控制台也可以解决它。

      为所有异常设置断点 - 非常有用!学习怎样: "Run > Stop on Objective-C exception" in Xcode 4?

      此外,请查看此线程以了解添加到应用程序的好方法,以确保您始终获得符号化的堆栈跟踪: Xcode 4.2 debug doesn't symbolicate stack call

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多