1

I have some basic animation in an iOS app I'm creating that has behaved completely fine... until yesterday.

I apparently made a change that somehow affected it, and I'm having trouble identifying what the issue is.

When stepping through the code, it gets to this chunk of code, and dies after stepping over the commitAnimation line (I originally wrote this before I realized the beauty of [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

The error from the debugger after I step over commitAnimation is giving me very little help:

*** 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)

Does anyone know what kind of array this might be talking about? It is a UIKit call that it's dying on, so I'm thinking the array is some array of views used by UIKit, but that I have no visibility into...

Any ideas on how to address or even further investigate this would be great!

karlbecker_com
  • 969
  • 1
  • 10
  • 16

2 Answers2

0

Try switching UIImageView to UIView

[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.1];
PublicationCoverImageReflectionView.alpha = 0.0;
[UIView commitAnimations];
Janak Nirmal
  • 22,706
  • 18
  • 63
  • 99
llama591
  • 453
  • 5
  • 15
0

So I figured out the issue, and it wasn't directly related to CoreAnimation... though that was a symptom of what was wrong.

I had been calling some blocks, and my debugging setup was not able to find out where it was crashing.

I searched around for some more debugging help, and the most helpful issue was learning how to set a breakpoint that triggers whenever an exception occurs. This helped me find exactly where it was happening. It was throwing the exception inside a block, and the default debugger GUI gave no indication of this... though using the console in Xcode could have solved it, too.

Set a breakpoint for all your exceptions - very useful! Learn how: "Run > Stop on Objective-C exception" in Xcode 4?

Also, check out this thread for a nice method to add to your app to ensure you always get a symbolicized stack trace: Xcode 4.2 debug doesn't symbolicate stack call

Community
  • 1
  • 1
karlbecker_com
  • 969
  • 1
  • 10
  • 16