我正在使用NSFetchedResultsController(NSFRC)来显示信息UITableView.我正在尝试为用户创建选项,以便按部分而不是按字母顺序对单元格进行排序.问题是,然后将使用下载的信息确定这些部分.除此之外,每个项目的部分将相对经常更改,因此我不想保存该部分.在我对类似问题的研究中,我注意到了瞬态属性的提及,但是在我不确定是否可以使用它们之前我从未使用它们,因为一旦数据已经加载,所有计算都完成了,我也希望这个解决方案与我以前的解决方案兼容Core Data database.我也不是特别擅长Core Data,(也不Objective-C是那个!)所以我不完全确定我会怎么做.
所以,如果我们使用瞬态属性,这就是我想要的(下一位是理论上的,因为我不知道瞬态属性是否是正确的前进方式).我想要4个可能的部分,0-3(我将使用它TableView delegate来重命名它们以解决排序问题).完成计算后,将为每个单元分配瞬态属性(如果需要,默认部分为2).我希望这一切都有道理.
对,现在为一些理论代码.首先,我在数据模型屏幕中创建瞬态属性,并通过检查瞬态复选框使其瞬态...听起来很简单.
在计算代码中willDisplayCell(由于几个原因需要在wDC中完成),实体可以像这样保存:
MyEntity *myEntity = [self.fetchedResultsController objectAtIndexPath:indexPath];
myEntity.sectionTransientProperty = 2;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Error: %@", error);
FATAL_CORE_DATA_ERROR(error);
return;
}
Run Code Online (Sandbox Code Playgroud)
做完了吧?那是我们如何为瞬态属性赋值?
然后我在分配它时更改NSFRC中的排序选项:
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"sectionTransientProperty"
cacheName:@"MyEntity"];
Run Code Online (Sandbox Code Playgroud)
我们怎么样,还需要做什么?或者我有这么可怕的错误我应该放弃Core Data and NSFRC?如果你们可以帮助引导我通过这个我真的很感激.如果您需要我发布更多代码,我将很乐意.
问候,
迈克
Mar*_*n R 26
如果您希望FRC包含节,则必须向获取请求添加排序描述符,并且该排序描述符不能基于瞬态属性.
请参阅initWithFetchRequest的文档:managedObjectContext:sectionNameKeyPath:cacheName:`:
如果控制器生成节,则数组中的第一个排序描述符用于将对象分组为多个节; 其键必须与sectionNameKeyPath相同,或者使用其键的相对排序必须与使用sectionNameKeyPath的相匹配.
并在"核心数据编程指南"中获取谓词和排序描述符:
另一方面,SQL存储将谓词和排序描述符编译为SQL,并在数据库本身中评估结果.这主要是为了提高性能,但这意味着评估是在非Cocoa环境中进行的,因此依赖Cocoa的排序描述符(或谓词)无法工作.支持的排序选择器是......
此外,您无法使用SQLite存储对瞬态属性进行排序.
这意味着您无法仅在瞬态属性上创建节.您需要一个持久属性来创建节的排序.
更新:瞬态属性的典型用法如下sectionNameKeyPath:您的对象具有"timeStamp"属性,并且您希望将对象分组为每月一个部分的部分(请参阅iOS Developer Library中的DateSectionTitles示例代码).在这种情况下,你有
sectionNameKeyPath."sectionIdentifier"从"timeStamp"计算并返回表示时间戳的年份和月份的字符串,例如"2013-01".FRC做的第一件事是根据"timeStamp"属性对所有获取的对象进行排序.然后根据"sectionIdentifier"属性将对象分组为多个部分.
因此,对于FRC将对象分组为多个部分,您确实需要一个持久属性.最简单的解决方案是向您的实体添加持久属性"sectionNumber",并将其用于"sectionNameKeyPath" 和第一个排序描述符.
| 归档时间: |
|
| 查看次数: |
11027 次 |
| 最近记录: |