NSFetchedResultsController Marcus S. Zarra
Wednesday, September 29, 2010
Cocoa Bindings (KVC / KVO)
Wednesday, September 29, 2010
Cocoa Bindings (KVC / KVO)
Not Available in Cocoa Touch Wednesday, September 29, 2010
Cocoa Bindings (KVC / KVO)
Not Available in Cocoa Touch Yet? Wednesday, September 29, 2010
NSFetchedResultsController
Wednesday, September 29, 2010
NSFetchedResultsController What does it do?
Wednesday, September 29, 2010
NSFetchedResultsController What does it do? Watches the NSManagedObjectContext
Wednesday, September 29, 2010
NSFetchedResultsController What does it do? Watches the NSManagedObjectContext Compares it against a NSFetchRequest
Wednesday, September 29, 2010
NSFetchedResultsController What does it do? Watches the NSManagedObjectContext Compares it against a NSFetchRequest Notifies Delegate of changes
Wednesday, September 29, 2010
NSFetchedResultsController What does it do? Watches the NSManagedObjectContext Compares it against a NSFetchRequest Notifies Delegate of changes
Limits
Wednesday, September 29, 2010
NSFetchedResultsController What does it do? Watches the NSManagedObjectContext Compares it against a NSFetchRequest Notifies Delegate of changes
Limits Single Entity Only
Wednesday, September 29, 2010
NSFetchedResultsController What does it do? Watches the NSManagedObjectContext Compares it against a NSFetchRequest Notifies Delegate of changes
Limits Single Entity Only No logic on notifications Wednesday, September 29, 2010
NSFetchedResultsController What does it do?
Buggy!
Watches the NSManagedObjectContext Compares it against a NSFetchRequest Notifies Delegate of changes
Limits
Single Entity Only No logic on notifications Wednesday, September 29, 2010
Associated Press
Wednesday, September 29, 2010
Associated Press
Wednesday, September 29, 2010
Associated Press
Wednesday, September 29, 2010
AP Data Model
Wednesday, September 29, 2010
AP Data Model
Wednesday, September 29, 2010
AP Data Model
Wednesday, September 29, 2010
AP Data Model
Wednesday, September 29, 2010
AP Data Model
Wednesday, September 29, 2010
AP Data Model
Wednesday, September 29, 2010
Building Our Own Watcher
Wednesday, September 29, 2010
NSNotificationCenter
Wednesday, September 29, 2010
NSNotificationCenter obser ve NSManagedObjectContext
Wednesday, September 29, 2010
NSNotificationCenter obser ve NSManagedObjectContext call -contextSaved:
Wednesday, September 29, 2010
NSNotificationCenter obser ve NSManagedObjectContext call -contextSaved: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextSaved:) name:NSManagedObjectContextObjectsDidChangeNotification object:[[XXXXXXXXXXXX shared] managedObjectContext]];
Wednesday, September 29, 2010
Processing The Changes
Wednesday, September 29, 2010
Build an NSArray of changes
Wednesday, September 29, 2010
Build an NSArray of changes Filter with NSPredicate
Wednesday, September 29, 2010
Build an NSArray of changes Filter with NSPredicate NSMutableArray *changed = [[NSMutableArray alloc] init]; [changed addObjectsFromArray:[[notification userInfo] objectForKey:@"inserted"]]; [changed addObjectsFromArray:[[notification userInfo] objectForKey:@"updated"]]; [changed addObjectsFromArray:[[notification userInfo] objectForKey:@"deleted"]]; if (![changed count]) { [changed release], changed = nil; return; } NSPredicate *blockPred = [NSPredicate predicateWithFormat:@"entity.name == 'Block' AND (parent IN %@ OR self IN %@)", [self currentEditorialBlocks], [self currentEditorialBlocks]];
Wednesday, September 29, 2010
ZSContextWatcher
Wednesday, September 29, 2010
ZSContextWatcher Generic Watcher Object
Wednesday, September 29, 2010
ZSContextWatcher Generic Watcher Object Accepts a single delegate
Wednesday, September 29, 2010
ZSContextWatcher Generic Watcher Object Accepts a single delegate Can watch N entities
Wednesday, September 29, 2010
ZSContextWatcher Generic Watcher Object Accepts a single delegate Can watch N entities Will filter on a predicate for that entity.
Wednesday, September 29, 2010
ZSContextWatcher Generic Watcher Object Accepts a single delegate Can watch N entities Will filter on a predicate for that entity.
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
ZSContextWatcher Generic Watcher Object Accepts a single delegate Can watch N entities Will filter on a predicate for that entity.
BSD License http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
[[ZSContextWatcher alloc] initWithManagedObjectContext:]
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
[[ZSContextWatcher alloc] initWithManagedObjectContext:]
-addEntityToWatch:withPredicate:
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
[[ZSContextWatcher alloc] initWithManagedObjectContext:]
-addEntityToWatch:withPredicate:
Append to master predicate
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
[[ZSContextWatcher alloc] initWithManagedObjectContext:]
-addEntityToWatch:withPredicate:
Append to master predicate Master Predicate || (entity.name = %@ && ${predicate})
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContextDidSaveNotification
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContextDidSaveNotification
forEach(inserted, updated, deleted):
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContextDidSaveNotification
forEach(inserted, updated, deleted):
• Filter
array using predicate
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContextDidSaveNotification
forEach(inserted, updated, deleted):
• Filter • See if
array using predicate it is empty
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContextDidSaveNotification
forEach(inserted, updated, deleted):
• Filter array using • See if it is empty • If at least one is
predicate
not empty, then notify delegate
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContext *moc = [self managedObjectContext]; watcher = [[ZSContextWatcher alloc] initWithManagedObjectContext:moc]; [watcher setDelegate:self]; [watcher setAction:@selector(refreshDisplay:)]; NSEntityDescription *entity = nil; NSPredicate *predicate = nil; entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]; predicate = [NSPredicate predicateWithFormat:@"name == %@", @"John"]; [watcher addEntityToWatch:entity withPredicate:predicate]; entity = [NSEntityDescription entityForName:@"Dog" inManagedObjectContext:moc]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Spot"]; [watcher addEntityToWatch:entity withPredicate:predicate];
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContext *moc = [self managedObjectContext]; watcher = [[ZSContextWatcher alloc] initWithManagedObjectContext:moc]; [watcher setDelegate:self]; [watcher setAction:@selector(refreshDisplay:)]; NSEntityDescription *entity = nil; NSPredicate *predicate = nil; entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]; predicate = [NSPredicate predicateWithFormat:@"name == %@", @"John"]; [watcher addEntityToWatch:entity withPredicate:predicate]; entity = [NSEntityDescription entityForName:@"Dog" inManagedObjectContext:moc]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Spot"]; [watcher addEntityToWatch:entity withPredicate:predicate];
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContext *moc = [self managedObjectContext]; watcher = [[ZSContextWatcher alloc] initWithManagedObjectContext:moc]; [watcher setDelegate:self]; [watcher setAction:@selector(refreshDisplay:)]; NSEntityDescription *entity = nil; NSPredicate *predicate = nil; entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]; predicate = [NSPredicate predicateWithFormat:@"name == %@", @"John"]; [watcher addEntityToWatch:entity withPredicate:predicate]; entity = [NSEntityDescription entityForName:@"Dog" inManagedObjectContext:moc]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Spot"]; [watcher addEntityToWatch:entity withPredicate:predicate];
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContext *moc = [self managedObjectContext]; watcher = [[ZSContextWatcher alloc] initWithManagedObjectContext:moc]; [watcher setDelegate:self]; [watcher setAction:@selector(refreshDisplay:)]; NSEntityDescription *entity = nil; NSPredicate *predicate = nil; entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]; predicate = [NSPredicate predicateWithFormat:@"name == %@", @"John"]; [watcher addEntityToWatch:entity withPredicate:predicate]; entity = [NSEntityDescription entityForName:@"Dog" inManagedObjectContext:moc]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Spot"]; [watcher addEntityToWatch:entity withPredicate:predicate];
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
NSManagedObjectContext *moc = [self managedObjectContext]; watcher = [[ZSContextWatcher alloc] initWithManagedObjectContext:moc]; [watcher setDelegate:self]; [watcher setAction:@selector(refreshDisplay:)]; NSEntityDescription *entity = nil; NSPredicate *predicate = nil; entity = [NSEntityDescription entityForName:@"Person" inManagedObjectContext:moc]; predicate = [NSPredicate predicateWithFormat:@"name == %@", @"John"]; [watcher addEntityToWatch:entity withPredicate:predicate]; entity = [NSEntityDescription entityForName:@"Dog" inManagedObjectContext:moc]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Spot"]; [watcher addEntityToWatch:entity withPredicate:predicate];
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
- (void)refreshDisplay:(NSDictionary*)changes { NSArray *inserted = [changes valueForKey:NSInsertedObjectsKey]; NSArray *updated = [changes valueForKey:NSUpdatedObjectsKey]; NSArray *deleted = [changes valueForKey:NSDeletedObjectsKey]; //Do something with the notification }
http://github.com/ZarraStudios/ZDS_Shared Wednesday, September 29, 2010
React to Changes
Wednesday, September 29, 2010
React to Changes Be quick about it!
Wednesday, September 29, 2010
File Bugs!
Wednesday, September 29, 2010
File Bugs! http://radar.apple.com
Wednesday, September 29, 2010
Marcus S. Zarra
Wednesday, September 29, 2010
cimgf.com
@mzarra
Marcus S. Zarra
[email protected] Wednesday, September 29, 2010