一. Core Data and UITableView
1. NSFetchedResultsController
a. 把NSFetchRequest 和 UITableViewController 关联起来;
b. 在UITableViewController 中需要有个NSFetchedResultsController 属性;
c. 例如:
- (NSUInteger)numberOfSectionsInTableView:(UITableView*)sender {
return [[self.fetchedResultsController sections] count];
}
- (NSUInteger)tableView:(UITableView*)sender numberOfRowsInSection:(NSUInteger)section {
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}
- (UITableViewCell*)tableView:(UITableView*)sender
cellForRowAtIndexPath:(NSIndexPath*)indexPath {
UITableViewCell *cell = ...;
Photo *photo = (Photo*)[self.fetchedResultsController objectAtIndexPath:indexPath];
// ...
// ...
return cell;
}
d. 创建 NSFetchedResultsController
. 需要NSFetchRequest 和 NSManagedObjectContext
. code :
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
initWithFetchRequest:(NSFetchRequest*)request
managedObjectContext:(NSManagedObjectContext*)context
sectionNameKeyPath:(NSString*)keyThatSaysWhichSectionEachManagedObjectIsIn
cacheName:@"MyPhotoCache"];
e. delegate : Core Data 发送变化时,调用,更新TableVIew
- (void)controller:(NSFetchedResultsController*)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath*)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath*)newIndexPath {
}
1. NSFetchedResultsController
a. 把NSFetchRequest 和 UITableViewController 关联起来;
b. 在UITableViewController 中需要有个NSFetchedResultsController 属性;
c. 例如:
- (NSUInteger)numberOfSectionsInTableView:(UITableView*)sender {
return [[self.fetchedResultsController sections] count];
}
- (NSUInteger)tableView:(UITableView*)sender numberOfRowsInSection:(NSUInteger)section {
return [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
}
- (UITableViewCell*)tableView:(UITableView*)sender
cellForRowAtIndexPath:(NSIndexPath*)indexPath {
UITableViewCell *cell = ...;
Photo *photo = (Photo*)[self.fetchedResultsController objectAtIndexPath:indexPath];
// ...
// ...
return cell;
}
d. 创建 NSFetchedResultsController
. 需要NSFetchRequest 和 NSManagedObjectContext
. code :
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc]
initWithFetchRequest:(NSFetchRequest*)request
managedObjectContext:(NSManagedObjectContext*)context
sectionNameKeyPath:(NSString*)keyThatSaysWhichSectionEachManagedObjectIsIn
cacheName:@"MyPhotoCache"];
e. delegate : Core Data 发送变化时,调用,更新TableVIew
- (void)controller:(NSFetchedResultsController*)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath*)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath*)newIndexPath {
}
2. Demo 比较完整