Last night, I tweeted this:
<script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>Wouldn’t it be nice if instead of returning an array of objects from a fetch, Core Data returned some kind of auto updating fetch result?
— Luke Redpath (@lukeredpath) December 10, 2012
This is my attempt to satisfy that need.
There's nothing fancy here - you'll want to clone the submodules so you can run the tests. It's just one file at the moment.
A category on NSManagedObjectContext
provides the LR_executeFetchRequestAndReturnResultSet:error:
, which executes the fetch request and returns the resulting objects wrapped in an instance of LRFetchedResultSet
. See the header file for more information.
You can observe changes to the result set by setting a change block. Changes will only be observed if this block is set.
NSFetchRequest *request = ...;
LRFetchedResultSet *results = [self.managedObjectContext LR_executeFetchRequestAndReturnResultSet:request error:nil];
if (results == nil) {
// handle error
}
else {
[results notifyChangesUsingBlock:^(NSDictionary *changes) {
// changes contains inserted, updated and deleted objects
}];
}
Sort of - but not quite. For a start, NSFetchedResultsController is only available on iOS and it is specifically designed to work with UITableView data sources. It speaks in the domain of rows and sections, whereas this is more generic. You get your results, you can observe any changes to those results.
All code is licensed under the MIT license. See the LICENSE file for more details.