1

我正在创建的 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 使用的一些视图数组,但我无法看到......

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

4

2 回答 2

0

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

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

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

为所有异常设置断点 - 非常有用!了解如何: Xcode 4 中的“运行 > 在 Objective-C 异常上停止”?

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

于 2012-08-09T19:25:40.567 回答
0

尝试切换UIImageViewUIView

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.1];
PublicationCoverImageReflectionView.alpha = 0.0;
[UIView commitAnimations];
于 2012-07-20T20:30:11.990 回答