我正在开发一个硬币应用程序。硬币在由 Core Data 管理的表格视图中呈现给用户。
所有硬币名称都以“19”或“20”开头。当我在表视图上实现部分索引时,我的索引中只得到一个“1”和一个“2”。按“1”将桌子移动到“1900”硬币,按“2”将我带到“2000”硬币。我知道为什么会这样,它来自名称字段中的第一个数字。
我想要的是“1910”、“1920”、“1930”等,所以用户可以跳转到十年。
我在模型中添加了一个名为“titleForSection”的属性,并输入了“1910”、“1920”等,并在我的获取请求中将 sectionNameKeyPath 设置为我的@“titleForSection”属性。不用说,它不起作用。
任何人都知道如何使部分索引名称属性的前 4 位?
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[fetchedResultsController sections] count];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
if (self.searchIsActive) {
return [self.filteredListContent count];
}
NSInteger numberOfRows = 0;
if ([[fetchedResultsController sections] count] > 0) {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
numberOfRows = [sectionInfo numberOfObjects];
}
return numberOfRows;
}
//for index
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return [fetchedResultsController sectionIndexTitles];
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return [fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController != nil) {
return fetchedResultsController;
}
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Coins" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
//set batch size
[fetchRequest setFetchBatchSize:20];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"titleForSection" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[aFetchedResultsController release];
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return fetchedResultsController;
}
更新:
我将“titleForSection”属性从字符串更改为数字,然后将数据库从 1900 年一直填充到 2010 年,以十年为单位。现在我的表索引只显示“0”、“1”和“2”。我只是不明白为什么我不能在那里输入一个数字!