GTTableViewController 是一个轻量级的 UIViewController
子类,它集成了 NSFetchedResultsController
和 UITableView
以显示CoreData数据。它具有良好的可扩展性,可以通过继承或通过使用数据源方法作为子视图控制器集成到项目中。要在UITableView中显示数据,您只需自定义自己的 NSFetchRequest
和 UITableViewCell
对象。
编写一个GTTableViewController子类,并像这样重写其方法:
返回你要使用的CoreData上下文中的 NSManagedObjectContext
对象。如果没有重写,则默认从AppDelegate中返回。
- (NSManagedObjectContext *)managedObjectContext
{
id appDelegate = [UIApplication sharedApplication].delegate;
return [appDelegate managedObjectContext];
}
返回包含查询规则和顺序的 NSFetchRequest
对象。此方法必须被重写。
- (NSFetchRequest *)fetchRequest
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *playerEntity = [NSEntityDescription entityForName:@"Player" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:playerEntity];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
return fetchRequest;
}
配置您自己的 UITableViewCell
。如果没有重写,则Cell为空。
- (void)configCell:(UITableViewCell *)cell cellForRowAtIndexPath:(NSIndexPath *)indexPath fetchedResultsController:(NSFetchedResultsController *)fetchedResultsController
{
Player *player = [fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = player.name;
}
返回您的自定义 UITableViewCell
。如果没有重写,则Cell为 UITableViewCellStyleDefault
。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath fetchedResultsController:(NSFetchedResultsController *)fetchedResultsController
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
[self configCell:cell cellForRowAtIndexPath:indexPath fetchedResultsController:fetchedResultsController];
return cell;
}
数据源几乎像继承方式。这种方式用于将其集成为子视图或子视图控制器。
在 UIViewController
对象中编写如下代码:
GTTableViewController *viewController = [[GTTableViewController alloc] init];
viewController.dataSource = self;
[self addChildViewController:viewController];
[self.view addSubview:viewController.view];
- (NSManagedObjectContext *)managedObjectContextGTTableViewController:(GTTableViewController *)viewController
此方法为必需。
- (NSFetchRequest *)fetchRequestGTTableViewController:(GTTableViewController *)viewController
- (void)configCell:(UITableViewCell *)cell viewController:(GTTableViewController *)viewController fetchedResultsController:(NSFetchedResultsController *)fetchedResultsController
- (void)configCell:(UITableViewCell *)cell cellForRowAtIndexPath:(NSIndexPath *)indexPath viewController:(GTTableViewController *)viewController fetchedResultsController:(NSFetchedResultsController *)fetchedResultsController
获取对象方法
- (void)performFetch
此属性控制 UITableView 中显示的获取对象的最大数量。
@property (nonatomic, assign) int numberOfFetchLimit
龚涛 Gong Tao 邮箱:[email protected]