50 views, as you describe, sounds like a great god of memory. Therefore, I suspect that memory management unloads some kinds. Then, when your program needs presentations, they are not there, and your program will fail. The error message does not quite match this, but it may not be accurate to tell you what the problem is.
Consider the following possible scenario and see if it is suitable for encoding this program.
In order for the OS to manage memory, it can unload views and reload them as needed. When this is done, the methods viewDidUnload, loadView, and viewDidLoad are called.
viewDidUnload:
This method is called as an analog of the viewDidLoad method. It is called during low memory conditions when the view manager needs to free its view and any objects associated with this view in order to free memory. Because view controllers often store references to views and other objects associated with the view, you should use this method to relinquish ownership of these objects so that their memory can be recovered. You should only do this for objects that you can easily recreate later, either in the viewDidLoad method or from other parts of your application. You should not use this method to release user data or any other information that cannot be easily recreated.
loadView:
The view controller calls this method when it requests a view property, but it is currently zero. If you create your views manually, you must override this method and use it to create your views. If you use Interface Builder to create your views and initialize the view controller, that is, you initialize the view using the initWithNibName: bundle method: directly set the nibName and nibBundle properties or create both views and the view controller in the Builder interface, then you should not override this method .
Check out the link to the UIView class -
viewDidLoad:
This method is called after the view controller has loaded the views associated with it into memory. This method is called whether the views were saved in the nib file or created programmatically in the loadView method. This method is most often used to perform additional steps to initialize views loaded from nib files.
You may have unintentionally initialized these views in your init methods, not your loadView methods. If you do this, then when the OS unloads the view (you will see viewDidUnload), the memory associated with the view and all sub-items (all images and animations) will be unloaded. This saves memory, but when you need one of these unloaded views to reappear, loadView will be called first if the view was previously unloaded. If view customization is done in init methods and not in loadView, the view will not be configured again. But if the view is set up in the loadView method, it can be restored after memory management unloads it.