Marcus S. Zarra

Report 3 Downloads 55 Views
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