【发布时间】:2026-01-15 09:30:01
【问题描述】:
我尝试使用 NSFetchedResultsController 来向我的 tableView 显示部分。但是现在我的 tableView 一直是空的。
@property (nonatomic,strong) NSManagedObjectContext* managedObjectContext;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
- (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (void)viewDidLoad
{
self.fetchedResultsController = nil;
self.fetchedResultsController.delegate = nil;
}
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
// Create and configure a fetch request with the plant entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Travel" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
// Create the sort descriptors array.
NSSortDescriptor *nameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:nameDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"country" cacheName:@"country"];
self.fetchedResultsController = aFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return [[self.fetchedResultsController sections] count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [self.fetchedResultsController sections][section];
return [sectionInfo numberOfObjects];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { return @""; }
我按照教程进行操作,但 tableView 现在是空的。我的 tableView 工作正常(使用 coreData)。 也许有人知道我的问题的答案。谢谢。
【问题讨论】:
-
你应该调用 [self fetchedResultsController] 而不是 [self.fetchedResultsController]。您在 viewDidLoad 中将后者设置为 nil。
-
@theaob 看他的代码,他懒洋洋地把它加载到访问器中。
-
@user2650439 请您告诉我您使用的教程,以便我建议人们避免使用它。
-
@Abizern [self fetchedResultsController] 永远不会被调用。所以该属性永远不会被初始化。
-
你认为 self.fetchedResultsController 会解析成什么?
标签: ios core-data tableview nsfetchedresultscontroller