 <p>Let's make an answer out of these good comments:</p> <p>It looks to me like the code that works actually executes the block and the block's return result is the parameter passed to setRegion: where the second attempt passes the block itself as a parameter to setRegion:, which is of course expecting an MKCoordinateRegion as its parameter, not a block.</p> <p>And (credit to MartinR), you can force evaluation of the block with an extra set of parentheses:</p> <p>EDIT I'll get this right eventually</p> <pre><code>[self.mapView setRegion:^MKCoordinateRegion(void){ CLLocationCoordinate2D centerCoordinate = [Location sharedManager].coordinate; MKCoordinateSpan span = MKCoordinateSpanMake(0.01, 0.01); return MKCoordinateRegionMake(centerCoordinate, span); }()]; </code></pre>