Just a quick tip, this one.
In Objective-C, like in every strongly typed language, sometimes you need to cast something to another type:
ModalViewController* modalController = (ModalViewController*)self.parentViewController;
Well, you don't have to, but you get a pesky warning if you don't. The code will work fine, but warnings are ugly: