gpt4 book ai didi

iphone - nsfetchedresultscontroller 实现令人困惑

转载 作者:行者123 更新时间:2023-11-29 03:44:45 44 4
gpt4 key购买 nike

我在使用 NSFetchedResultsController 的 方法时遇到问题。我已经阅读了实现,但似乎没有点击。具体来说,这些方法(来自 Apple 文档):

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[<#Fetched results controller#> sections] count];
}

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[<#Fetched results controller#> sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[<#Fetched results controller#> sections] objectAtIndex:section];
return [sectionInfo name];
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return [<#Fetched results controller#> sectionIndexTitles];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return [<#Fetched results controller#> sectionForSectionIndexTitle:title atIndex:index];
}

我不明白的是 sectionssectionIndexTitles 属性。我在初始化 NSFetchedResultsController 时从未声明过这些属性,那么 XCode 如何知道它们以及如何在不崩溃的情况下显示它们?

此外,在方法中

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:@"<#Cache name#>"];

我不明白如何设置sectionNameKeyPath。例如,如果我想创建一个包含已完成和未完成任务的待办事项列表,我如何将它们分为两个部分?我需要任务实体中的值吗?这个值是否必须是一个字符串/我是否必须给它一个自定义 setter ?

我非常感谢您的帮助!

最佳答案

1.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;

这是您想要在表中显示的部分数。部分是一组具有共同点的项目。他们可能都以相同的字母开头(就像在联系人应用程序中一样),他们可能是属于不同联赛的球队,他们可能是按出生国家/地区划分的人,等等...

2.

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section;

这是属于所提供部分的项目数。例如,可能有 3 个人出生在法国,2 个人出生在德国。因此,您转到获取结果 Controller 询问该部分中有多少对象并返回数字。

3.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section;

这是该部分的标题。 “法国”、“德国”等...

如果您在获取的结果 Controller 中指定了“sectionKeyPath”,则section.name将是您为其指定的路径名​​的数据对象的分组值。

即sectionKeyPath = CountryOfBirth.name;

这将返回该部分中每个人的出生国家/地区对象的姓名值。

4.

5.

这些都与表格右侧边缘的索引相关。它们是可选的。我建议您暂时忽略这些方法,直到您了解其他方法为止。

因此,要使用我的示例,您可能会这样做......

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestForEntityName:@"Person"];

NSSortDescriptor *countrySD = [NSSortDescriptor sortDescriptorWithKey:@"countryOfBirth.name" ascending:YES];
NSSortDescriptor *nameSD = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

[fetchRequest setSortDescriptors:@[countrySD, nameSD]];

NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:@"countryOfBirth.name"
cacheName:nil];

这会给你一些类似的东西......

- Albania
- Bob
- Margaret
- France
- Alice
- John
- Zimbabwe
- Jason
- Zachary

关于iphone - nsfetchedresultscontroller 实现令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885586/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com