UIScrollView setContentSize error with NSRangeException not displaying

The setContentSize call causes the application to crash after some of the contents of the UIScrollView have been deleted.

int toolbarHeight = [[[self navigationController] toolbar] frame].size.height; int navbarHeight = [[[self navigationController] navigationBar] frame].size.height; int totalHeight = toolbarHeight + navbarHeight; // contentWidth is 640 CGSize contentSize = CGSizeMake(contentWidth, [scrollView frame].size.height - totalHeight); [scrollView setContentSize:contentSize]; // Crash happens here, contentSize is perfectly valid 

* Application termination due to an uncaught exception "NSRangeException", reason: "* - [__ NSArrayM objectAtIndex:]: index 1 outside the bounds [0 .. 0] '

What could be the reason for this?

EDIT : Here's the stack trace for those who can understand it:

 * thread #1: tid = 0x1c03, 0x34d2e32c libsystem_kernel.dylib`__pthread_kill + 8, stop reason = signal SIGABRT frame #0: 0x34d2e32c libsystem_kernel.dylib`__pthread_kill + 8 frame #1: 0x36c2a20e libsystem_c.dylib`pthread_kill + 54 frame #2: 0x36c2329e libsystem_c.dylib`abort + 94 frame #3: 0x308eff6a libc++abi.dylib`abort_message + 46 frame #4: 0x308ed34c libc++abi.dylib`_ZL17default_terminatev + 24 frame #5: 0x36361356 libobjc.A.dylib`_objc_terminate + 146 frame #6: 0x308ed3c4 libc++abi.dylib`_ZL19safe_handler_callerPFvvE + 76 frame #7: 0x308ed450 libc++abi.dylib`std::terminate() + 20 frame #8: 0x308ee824 libc++abi.dylib`__cxa_rethrow + 88 frame #9: 0x363612a8 libobjc.A.dylib`objc_exception_rethrow + 12 frame #10: 0x34e9050c CoreFoundation`CFRunLoopRunSpecific + 404 frame #11: 0x34e9036c CoreFoundation`CFRunLoopRunInMode + 104 frame #12: 0x3618c438 GraphicsServices`GSEventRunModal + 136 frame #13: 0x31f86e7c UIKit`UIApplicationMain + 1080 frame #14: 0x0000cb50 App`main + 152 at main.m:16 
+4
source share
1 answer

It seems that an exception is thrown when the content offset remains outside the size of the content.

 I had views side by side in the scroll view and the offset was to the last view. +------+------+------+ | | |offset| +------+------+------+ Now the last view is removed and the content size changed to a smaller one. +------+------+ | | |offset +------+------+ The offset is left behind. 

I changed the code so that the offset was moved first, and then the content size changed.

 +------+------+ | |offset| +------+------+ 

There are no accidents yet.

+5
source

All Articles