<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>I’m a professional mobile developer with a passion for elegant code and craft beer.  I live in the greatest beer drinking city in the world.</description><title>Will Beer for Code</title><generator>Tumblr (3.0; @jose-ibanez)</generator><link>http://jose-ibanez.tumblr.com/</link><item><title>jonyiveredesignsthings:

Jony Ive redesigns the OS...</title><description>&lt;img src="http://25.media.tumblr.com/9be6af176ef07c188435bc165e971a22/tumblr_molo6vvfbf1svn1xeo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://jonyiveredesignsthings.tumblr.com/post/53289798021/jony-ive-redesigns-the-os-x" class="tumblr_blog"&gt;jonyiveredesignsthings&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Jony Ive redesigns the OS X.&lt;/p&gt;
&lt;p&gt;Credit &lt;a href="https://twitter.com/lukespencerpie"&gt;&lt;span&gt;@&lt;/span&gt;lukespencerpie&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://jose-ibanez.tumblr.com/post/53306280061</link><guid>http://jose-ibanez.tumblr.com/post/53306280061</guid><pubDate>Tue, 18 Jun 2013 17:38:00 -0400</pubDate></item><item><title>I wish it was Sea Lion.</title><description>&lt;img src="http://24.media.tumblr.com/d7d46effd62cbc1ab8df47e7b50a544e/tumblr_mob9xeXrg91svny6go1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I wish it was Sea Lion.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/53279198750</link><guid>http://jose-ibanez.tumblr.com/post/53279198750</guid><pubDate>Tue, 18 Jun 2013 10:53:09 -0400</pubDate></item><item><title>WWDC 2013</title><description>&lt;p&gt;I&amp;#8217;m in San Francisco right now for WWDC 2013 and I&amp;#8217;m pretty excited about it. I&amp;#8217;ve never been to San Fran or WWDC before, so I don&amp;#8217;t really know what to expect, but I&amp;#8217;m hoping to come away with my excitement for iOS reinvigorated and more resources for when there&amp;#8217;s a problem I can&amp;#8217;t figure out.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/52604349880</link><guid>http://jose-ibanez.tumblr.com/post/52604349880</guid><pubDate>Mon, 10 Jun 2013 00:32:28 -0400</pubDate><category>iOS</category><category>WWDC</category></item><item><title>I must be a businessman. on Flickr.</title><description>&lt;img src="http://25.media.tumblr.com/e1468d6f3bec029f7dd3d7eb7d980459/tumblr_mnxojgW1I81rqr85wo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jose_ibanez/8961174211/" title="I must be a businessman."&gt;I must be a businessman.&lt;/a&gt; on Flickr.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/52236209002</link><guid>http://jose-ibanez.tumblr.com/post/52236209002</guid><pubDate>Wed, 05 Jun 2013 14:54:51 -0400</pubDate></item><item><title>Photo</title><description>&lt;img src="http://25.media.tumblr.com/2ca1cec3e34e05be54e4721dde928dc5/tumblr_mlmi9xE7wf1qk91wgo1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/efe04788853a9391963d705101f77251/tumblr_mlmi9xE7wf1qk91wgo2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/028476eec6efa0daf6881024770b92cc/tumblr_mlmi9xE7wf1qk91wgo3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/2e83aec9c352f77ebb146c010d892fd6/tumblr_mlmi9xE7wf1qk91wgo4_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/6a29d773c960eceab1abcff06344bf3d/tumblr_mlmi9xE7wf1qk91wgo5_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/a4b4e69bf4f08f0b77a350d8732789a4/tumblr_mlmi9xE7wf1qk91wgo6_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/91081344cdbd489c5c2e2f76db094022/tumblr_mlmi9xE7wf1qk91wgo7_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;</description><link>http://jose-ibanez.tumblr.com/post/48654439231</link><guid>http://jose-ibanez.tumblr.com/post/48654439231</guid><pubDate>Mon, 22 Apr 2013 20:43:15 -0400</pubDate></item><item><title>InstaCrab</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/b5a4aa68cf0d58e61d9bd03b428ec9ca/tumblr_inline_mk4iumfhqo1qz4rgp.png" alt="InstaCrab icon"/&gt;&lt;/p&gt;

&lt;p&gt;The world&amp;#8217;s #1 Social Media app that adds random crabs to your photos was just released to the &lt;a href="https://itunes.apple.com/us/app/instacrab/id621785907"&gt;app store&lt;/a&gt;! While I feel we can all agree that crabs are awesome, I think the idea behind the app could still bear some explanation.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;I got the idea for InstaCrab, predictably enough, while eating lunch in a fancy restaraunt. I was eating some sort of fish, and it occurred to me that the dish would be greatly improved with some crab. There should be an app for that!&lt;/p&gt;

&lt;blockquote class="twitter-tweet"&gt;&lt;p&gt;Startup idea: Instacrab. Not sure what it would do yet, though.&lt;/p&gt;— Jose Ibanez (@jose_ibanez) &lt;a href="https://twitter.com/jose_ibanez/status/287632876130947072"&gt;January 5, 2013&lt;/a&gt;&lt;/blockquote&gt;

&lt;p&gt;Initially I was thinking it would be an app that would use location services to find the nearest place you could go to get crab, with a system for users to report in when they find a crab special or the like. Then I decided it would be easier to just take a picture and add a crab to it. There&amp;#8217;s something delightfully absurdist about an app that only does one thing, and that one thing is completely useless.  Like the meme that makes the rounds every once in a while:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;I have a computer in my pocket which accesses all the world&amp;#8217;s knowledge. I use it to get in arguments with strangers &amp;amp; look at pictures of cats&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I&amp;#8217;m considering adding some additional crabs via in-app purchases, or maybe some Old Bay. I&amp;#8217;ve also got a few ideas for some other apps along similar absurdist lines, but even something as simple as InstaCrab took a significant amount of work.&lt;/p&gt;

&lt;script async src="//platform.twitter.com/widgets.js" charset="utf-8"&gt;&lt;/script&gt;</description><link>http://jose-ibanez.tumblr.com/post/46084604582</link><guid>http://jose-ibanez.tumblr.com/post/46084604582</guid><pubDate>Sat, 23 Mar 2013 13:22:45 -0400</pubDate></item><item><title>the chemical brothers: "Velodrome" Vinyl Contest Winners Announced:</title><description>&lt;a href="http://thechemicalbrothers.tumblr.com/post/43404134228/velodrome-vinyl-contest-winners-announced"&gt;the chemical brothers: "Velodrome" Vinyl Contest Winners Announced:&lt;/a&gt;: &lt;p&gt;&lt;a href="http://thechemicalbrothers.tumblr.com/post/43404134228/velodrome-vinyl-contest-winners-announced"&gt;thechemicalbrothers&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Greetings Chemical Brothers &amp; Sisters,&lt;/p&gt;
  
  &lt;p&gt;At the end of last year we shared a special holiday mix download and collected your names for a prize drawing of the extremely rare “Velodrome” Vinyl. We’re pleased to announce the winners:&lt;/p&gt;
  
  &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Jose from Lafayette Hill, PA&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;&lt;/blockquote&gt;

&lt;p&gt;Hey, that’s me!&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/43404656488</link><guid>http://jose-ibanez.tumblr.com/post/43404656488</guid><pubDate>Mon, 18 Feb 2013 11:14:06 -0500</pubDate></item><item><title>Glamor shots of the Enjoy By bottle.</title><description>&lt;img src="http://25.media.tumblr.com/14997f3a31a51e15d78c5db0d22f64b0/tumblr_mjpix7G4KI1rqr85wo1_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/e587e075c75df2f545b08ab200f61e0b/tumblr_mjpix7G4KI1rqr85wo2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/8af3029d12b92578157d475689b2b39e/tumblr_mjpix7G4KI1rqr85wo3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;Glamor shots of the Enjoy By bottle.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/45420586050</link><guid>http://jose-ibanez.tumblr.com/post/45420586050</guid><pubDate>Fri, 15 Feb 2013 00:00:00 -0500</pubDate><category>beer</category><category>EnjoyBy</category></item><item><title>Stone Enjoy By Coming to Philadelphia!</title><description>&lt;a href="http://www.stonebrewing.com/enjoyby/"&gt;Stone Enjoy By Coming to Philadelphia!&lt;/a&gt;: &lt;p&gt;I’m stupid excited about this.  I’ve actually had two Enjoy By series already.  I had the 09.21.12 during my beer tour vacation to San Diego this past summer, and my cousin managed to get me a bottle of the 12.21.12.  Both were absolutely spectacular.  I will be picking up as many of these as I can.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/39966347068</link><guid>http://jose-ibanez.tumblr.com/post/39966347068</guid><pubDate>Mon, 07 Jan 2013 19:01:30 -0500</pubDate><category>Stone</category><category>Enjoy By</category><category>Beer</category></item><item><title>Stone Vertical Epic Lunch</title><description>&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8222/8296606155_3e807ee033_z.jpg" alt="Stone Vertical Epic Lunch"/&gt;&lt;/p&gt;

&lt;p&gt;This past Saturday &lt;a href="http://www.citytaphouse.com/"&gt;City Tap House&lt;/a&gt; and &lt;a href="https://twitter.com/phillystone"&gt;@PhillyStone&lt;/a&gt; hosted a special beer tasting lunch that sampled most of the &lt;a href="http://www.stonebrewing.com/verticalepic/"&gt;Stone Vertical Epic&lt;/a&gt; series.  Each year, Stone has created a unique take on a Belgian style that was meant for long-term aging, resulting in some exciting, rare beers.  The first batch was the 02.02.02, and each advanced by a year, a month, and a day, up to the most recent, and final, batch 12.12.12.  As one might imagine, these beers tend to be very hard to come by, so I couldn&amp;#8217;t pass up this opportunity to try so many of them.&lt;/p&gt;

&lt;p&gt;The lunch itself was a great time.  The crowd was great, the food was great, and the beer was &lt;em&gt;awesome&lt;/em&gt;.   At the end of the night, they decided to auctions a growler of each of the 10 Vertical Epics and the Lukcy Basatrd, with the entire amount being donated to the Ronald McDonald house.  We walked away with a growler of the 06.06.06.&lt;/p&gt;

&lt;p&gt;Tasting notes and beer porn to follow.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;h2&gt;1st Course: Lukcy Basatrd w/ Scallop Shrimp Ceviche w Serrano chiles&lt;/h2&gt;

&lt;p&gt;The 02.02.02 was one of the two vertical epics that we did not get to taste.  Instead, the first course was paired with Lukcy Basatrd, which is a good, hoppy, malty amalgam of all of the Bastard beers.  Good kick from the serranos in the ceviche, went very well with the hops from the beer..&lt;/p&gt;

&lt;h2&gt;2nd Course: 03.03.03 w/ Beef Taquitos&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8502/8302272060_b17f21d4a7_z.jpg" alt="03.03.03"/&gt;&lt;/p&gt;

&lt;p&gt;Belgian Strong Dark Ale. Deep copper color, warming, very malty, more Belgian yeast flavor emerged as it warmed.&lt;/p&gt;

&lt;h2&gt;3rd Course: 04.04.04 w/ Mushroom and Asparagus Salad&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8498/8302272284_2be7bcf1f6_z.jpg" alt="04.04.04"/&gt;&lt;/p&gt;

&lt;p&gt;Belgian Strong Pale Ale. Amber color, lots of Belgian yeasty funky spiciness.  The mushrooms were awesome.&lt;/p&gt;

&lt;h2&gt;4th Course: 05.05.05 Inspired Dark Chocolate Gelato&lt;/h2&gt;

&lt;p&gt;The 05.05.05 was the other vertical epic we didn&amp;#8217;t get to try.  Instead, we got this &amp;#8220;05.05.05 inspired&amp;#8221; palate cleanser.  Crushed red pepper gave the chocolate gelato some late kick.&lt;/p&gt;

&lt;h2&gt;5th Course: 06.06.06 w/ Beau Soleil &amp;amp; Kumamoto Oysters&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8500/8302272422_d87f865b5e_z.jpg" alt="06.06.06"/&gt;&lt;/p&gt;

&lt;p&gt;Strong Belgian Dark ale. Black in color. Trappist yeast lends a familiar spice, but there&amp;#8217;s a lot going on. My first sip reminded me of red wine, later sips were more stout like.&lt;/p&gt;

&lt;h2&gt;6th Course: 07.07.07 w/ Lamb Meatball&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8353/8301220459_c51fe88094_z.jpg" alt="07.07.07"/&gt;&lt;/p&gt;

&lt;p&gt;My favorite so far. A nice hoppy, spicy saison.  Very quaffable.&lt;/p&gt;

&lt;h2&gt;7th Course: 08.08.08 w/ Onion and Jalapeño Pepper Jack Quesadilla&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8073/8302272654_030d3b6089_z.jpg" alt="08.08.08"/&gt;&lt;/p&gt;

&lt;p&gt;Belgian IPA. My new favorite. Clear amber color. Belgian spice and some underlying sweetness balance the hops, which were pretty intense for a 4 year old beer.&lt;/p&gt;

&lt;h2&gt;8: 09.09.09 w/ Pastrami Burger on Rye&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8078/8301220751_9730436560_z.jpg" alt="09.09.09"/&gt;&lt;/p&gt;

&lt;p&gt;The pastrami burger was tremendous!  The 09 is more stout-like. Not my new favorite. Black in color, very complicated, no one understands it.&lt;/p&gt;

&lt;h2&gt;9: 10.10.10 w/ Grilled Marinated Squid&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8502/8302272952_e81eb0f5ae_z.jpg" alt="10.10.10"/&gt;&lt;/p&gt;

&lt;p&gt;Lots of citrus up front, with a detectable hint of white wine, decently hoppy.  I&amp;#8217;d rank it just behind the 07 and 08.&lt;/p&gt;

&lt;h2&gt;10: 11.11.11 w/ White Bean &amp;amp; Chorizo Soup&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8357/8301221005_6bfb9de77a_z.jpg" alt="11.11.11"/&gt;&lt;/p&gt;

&lt;p&gt;Strong malty backbone, with some good peppery notes. Sorry, 10, this is in 3rd now.&lt;/p&gt;

&lt;h2&gt;11: 12.12.12 w/ Crostini with Cheese&lt;/h2&gt;

&lt;p&gt;&lt;img src="http://farm9.staticflickr.com/8361/8301221181_6c9f97a849_z.jpg" alt="12.12.12"/&gt;&lt;/p&gt;

&lt;p&gt;Cinnamon up front on the nose and the dominant flavor. It&amp;#8217;s more in THE WIFE&amp;#8217;s wheelhouse than mine.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/38676621315</link><guid>http://jose-ibanez.tumblr.com/post/38676621315</guid><pubDate>Sun, 23 Dec 2012 21:11:22 -0500</pubDate><category>Stone</category><category>Beer</category></item><item><title>UICollectionViews and NSFetchedResultsControllers</title><description>&lt;p&gt;Anyone who&amp;#8217;s hooked up a &lt;code&gt;UITableView&lt;/code&gt; to Core Data is probably familiar with &lt;code&gt;NSFetchedResultsController&lt;/code&gt; and its delegate methods. It&amp;#8217;s a very elegant way to be notified whenever anything in your managed object context is updated, inserted, or removed, and it dovetails very nicely with &lt;code&gt;UITableView&lt;/code&gt;&amp;#8217;s interface for presenting updates.  However, &lt;code&gt;UICollectionView&lt;/code&gt;&amp;#8217;s block based interface for updates breaks this 1:1 relationship.  This is easy enough to get around, but I&amp;#8217;m going to rant about it anyway.&lt;/p&gt;

&lt;!-- more --&gt;

&lt;p&gt;&lt;code&gt;NSFetchedResultsControllerDelegate&lt;/code&gt; methods look like this:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;code&gt;-controllerWillChangeContent:&lt;/code&gt; is called before changes are made&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-controller:didChangeSection:...&lt;/code&gt; is called for changes to individual sections.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-controller:didChangeObject:...&lt;/code&gt; is called for changes to individual objects.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-controllerDidChangeContent:&lt;/code&gt; is called when all changes are complete.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This is exactly what &lt;code&gt;UITableView&lt;/code&gt;&amp;#8217;s updating methods look like.  You call &lt;code&gt;-beginUpdates:&lt;/code&gt; before changes are made, make individual changes to sections or rows, and then call &lt;code&gt;-endUpdates:&lt;/code&gt; when you&amp;#8217;re done.  Easy.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;UICollectionView&lt;/code&gt; eliminated the begin/end updates methods in favor of a block-based approach, &lt;code&gt;-performBatchUpdates:completion:&lt;/code&gt;.  This is generally the direction Apple has been moving since they introduced the block based &lt;code&gt;UIView&lt;/code&gt; animation method, so I can understand their reasoning.  Unfortunately, without an equivalent block based delegate method from &lt;code&gt;NSFetchedResultsController&lt;/code&gt;, this requires the developer to jump through some extra hoops.&lt;/p&gt;

&lt;p&gt;I originally found this &lt;a href="http://ashfurrow.com/blog/uicollectionview-example"&gt;blog post&lt;/a&gt; demonstrating how to implement a basic collection view, and made a few modifications to better suit my programming style.  while I&amp;#8217;m still slightly unhappy with having to add new instance variables to my class, I feel like this is a pretty elegant way of shoehorning the individual changes into the block call.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#pragma mark - NSFetchedResultsControllerDelegate

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
    _sectionChanges = [[NSMutableArray alloc] init];
    _itemChanges = [[NSMutableArray alloc] init];
}

- (void)controller:(NSFetchedResultsController *)controller
  didChangeSection:(id &amp;lt;NSFetchedResultsSectionInfo&amp;gt;)sectionInfo
           atIndex:(NSUInteger)sectionIndex
     forChangeType:(NSFetchedResultsChangeType)type {
    NSMutableDictionary *change = [[NSMutableDictionary alloc] init];
    change[@(type)] = @(sectionIndex);
    [_sectionChanges addObject:change];
}

- (void)controller:(NSFetchedResultsController *)controller
   didChangeObject:(id)anObject
       atIndexPath:(NSIndexPath *)indexPath
     forChangeType:(NSFetchedResultsChangeType)type
      newIndexPath:(NSIndexPath *)newIndexPath {
    NSMutableDictionary *change = [[NSMutableDictionary alloc] init];
    switch(type) {
        case NSFetchedResultsChangeInsert:
            change[@(type)] = newIndexPath;
            break;
        case NSFetchedResultsChangeDelete:
            change[@(type)] = indexPath;
            break;
        case NSFetchedResultsChangeUpdate:
            change[@(type)] = indexPath;
            break;
        case NSFetchedResultsChangeMove:
            change[@(type)] = @[indexPath, newIndexPath];
            break;
    }
    [_itemChanges addObject:change];
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.collectionView performBatchUpdates:^{
        for (NSDictionary *change in _sectionChanges) {
            [change enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
                NSFetchedResultsChangeType type = [key unsignedIntegerValue];
                switch(type) {
                    case NSFetchedResultsChangeInsert:
                        [self.collectionView insertSections:[NSIndexSet indexSetWithIndex:[obj unsignedIntegerValue]]];
                        break;
                    case NSFetchedResultsChangeDelete:
                        [self.collectionView deleteSections:[NSIndexSet indexSetWithIndex:[obj unsignedIntegerValue]]];
                        break;
                }
            }];
        }
        for (NSDictionary *change in _itemChanges) {
            [change enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
                NSFetchedResultsChangeType type = [key unsignedIntegerValue];
                switch(type) {
                    case NSFetchedResultsChangeInsert:
                        [self.collectionView insertItemsAtIndexPaths:@[obj]];
                        break;
                    case NSFetchedResultsChangeDelete:
                        [self.collectionView deleteItemsAtIndexPaths:@[obj]];
                        break;
                    case NSFetchedResultsChangeUpdate:
                        [self.collectionView reloadItemsAtIndexPaths:@[obj]];
                        break;
                    case NSFetchedResultsChangeMove:
                        [self.collectionView moveItemAtIndexPath:obj[0] toIndexPath:obj[1]];
                        break;
                }
            }];
        }
    } completion:^(BOOL finished) {
        _sectionChanges = nil;
        _itemChanges = nil;
    }];
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With the updated dictionary and array syntax, this code looks a little dense, so the high level idea is there are two mutable arrays, &lt;code&gt;_sectionChanges&lt;/code&gt; and &lt;code&gt;_itemChanges&lt;/code&gt;.  As individual changes come in, each one is converted into a dictionary with an &lt;code&gt;NSNumber&lt;/code&gt; representation of the change type as the key and the index path to change as the value.  That allows you to simply loop through your arrays in &lt;code&gt;-controllerDidChangeContent:&lt;/code&gt; and make all the updates at once.  I also feel that setting the arrays to nil in the completion block as opposed to simply removing all objects might be safer if new updates are ever sent before the change block is executed.&lt;/p&gt;

&lt;p&gt;I would expect Apple to add a new delegate method to add a block based callback to &lt;code&gt;NSFetchedResultsControllerDelegate&lt;/code&gt; in a future release; hopefully, along with an updated &lt;code&gt;UITableView&lt;/code&gt; that supports batch updates.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/38494557094</link><guid>http://jose-ibanez.tumblr.com/post/38494557094</guid><pubDate>Fri, 21 Dec 2012 17:29:00 -0500</pubDate><category>iOS</category><category>rant</category></item><item><title>One Night Only! on Flickr.I’m going to be drinking this...</title><description>&lt;img src="http://24.media.tumblr.com/570956e2e27e2bb2fed42e00799fffe1/tumblr_mfcu7gOafa1rqr85wo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://www.flickr.com/photos/jose_ibanez/8292961762/" title="One Night Only!"&gt;One Night Only!&lt;/a&gt; on Flickr.&lt;/p&gt;&lt;p&gt;I’m going to be drinking this Unibroue La Fin Du Monde tonight at midnight to toast our universe imploding/poles reversing/meteor/earthquakes/birds/snakes/aero planes demise with a thematically appropriate beverage.  Unfortunately, I don’t have any Fin Du Monde glasses, but I do have two Unibroue glasses featuring Ephemere and Blanche de Chambly.  I hope the Mayans don’t mind.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/38421683796</link><guid>http://jose-ibanez.tumblr.com/post/38421683796</guid><pubDate>Thu, 20 Dec 2012 19:18:52 -0500</pubDate><category>Unibroue</category></item><item><title>Xcode LLDB Tutorial</title><description>&lt;a href="http://www.cimgf.com/2012/12/13/xcode-lldb-tutorial/"&gt;Xcode LLDB Tutorial&lt;/a&gt;: &lt;p&gt;&lt;a href="http://www.cimgf.com/2012/12/13/xcode-lldb-tutorial/"&gt;&lt;img src="http://www.cimgf.com/wp-content/uploads/2012/12/breakpoint.png" alt="Who knew?"/&gt;&lt;/a&gt; This is honestly one of the most helpful posts I’ve read in a long time. I had no idea how much you could do with breakpoints in Xcode.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/38230901547</link><guid>http://jose-ibanez.tumblr.com/post/38230901547</guid><pubDate>Tue, 18 Dec 2012 11:19:59 -0500</pubDate><category>Xcode</category><category>LLDB</category></item><item><title>My nerd merit badge came in!</title><description>&lt;img src="http://25.media.tumblr.com/6899e366d8700d5660cd46c94bb1929a/tumblr_mf1pptbq6i1rqr85wo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;My nerd merit badge came in!&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/37941447936</link><guid>http://jose-ibanez.tumblr.com/post/37941447936</guid><pubDate>Fri, 14 Dec 2012 19:08:17 -0500</pubDate></item><item><title>cocoaheads:

Xcode in a Nutshell
</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mdhn7nq1pE1qbs1hto1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://cocoaheads.tumblr.com/post/35711948405/xcode-in-a-nutshell"&gt;cocoaheads&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Xcode in a Nutshell&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://jose-ibanez.tumblr.com/post/36062824255</link><guid>http://jose-ibanez.tumblr.com/post/36062824255</guid><pubDate>Mon, 19 Nov 2012 08:21:27 -0500</pubDate><category>xcode</category></item><item><title>JICoreDataOperation</title><description>&lt;a href="https://github.com/jose-ibanez/JICoreDataOperation"&gt;JICoreDataOperation&lt;/a&gt;: &lt;p&gt;Current best practices for using Core Data include performing as much of your work in a background thread as possible, and I’ve always preferred using &lt;code&gt;NSOperation&lt;/code&gt; subclasses to encapsulate units of work to using GCD and blocks. Since it always seemed like I was implementing the same NSOperation subclass every time, I decided to consolidate my work into a simple NSOperation subclass and open source it.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;JICoreDataOperation&lt;/code&gt; uses ARC and the &lt;code&gt;parentContext&lt;/code&gt; property on &lt;code&gt;NSManagedObjectContext&lt;/code&gt;, so it’s not appropriate for use in iOS projects targeting 4.3 or older, or Mac projects targeting 10.6 or older.  Subclasses of &lt;code&gt;JICoreDataOperation&lt;/code&gt; just have to specify a &lt;code&gt;parentContext&lt;/code&gt; and implement the &lt;code&gt;doWork&lt;/code&gt; method to get up and running.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/35272364068</link><guid>http://jose-ibanez.tumblr.com/post/35272364068</guid><pubDate>Thu, 08 Nov 2012 10:14:00 -0500</pubDate><category>iOS</category><category>Core Data</category></item><item><title>thedrunkenmoogle:

Meet Me at the Barby efleck</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_mcepa6XOBe1qa8q3yo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href="http://thedrunkenmoogle.com/post/34236663275/meet-me-at-the-bar-by-efleck" class="tumblr_blog"&gt;thedrunkenmoogle&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Meet Me at the Bar&lt;/strong&gt;&lt;br/&gt;&lt;a href="http://browse.deviantart.com/?q=mass+effect+bar#/d55ps08"&gt;by efleck&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://jose-ibanez.tumblr.com/post/34242026518</link><guid>http://jose-ibanez.tumblr.com/post/34242026518</guid><pubDate>Wed, 24 Oct 2012 14:48:05 -0400</pubDate><category>Mass Effect</category></item><item><title>I’ve never seen so many firkins! (at Pratt Street Ale...</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_mc7mciv7Ba1rqr85wo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I’ve never seen so many firkins! (at Pratt Street Ale House)&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/33981025489</link><guid>http://jose-ibanez.tumblr.com/post/33981025489</guid><pubDate>Sat, 20 Oct 2012 17:00:18 -0400</pubDate></item><item><title>Baltimore Beer Week’s Real Ale Fest (at Pratt Street Ale...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mc7gl7YrrF1rqr85wo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Baltimore Beer Week’s Real Ale Fest (at Pratt Street Ale House)&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/33973370426</link><guid>http://jose-ibanez.tumblr.com/post/33973370426</guid><pubDate>Sat, 20 Oct 2012 14:55:55 -0400</pubDate></item><item><title>1st week at Comcast went pretty well, I guess.</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mc5u90pXxT1rqr85wo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;1st week at Comcast went pretty well, I guess.&lt;/p&gt;</description><link>http://jose-ibanez.tumblr.com/post/33915780477</link><guid>http://jose-ibanez.tumblr.com/post/33915780477</guid><pubDate>Fri, 19 Oct 2012 17:55:48 -0400</pubDate></item></channel></rss>
