Objective c NSFetchedResultController。使用表达式/按条件计算sectionNameKeyPath
假设有一个名为testTable的表:Objective c NSFetchedResultController。使用表达式/按条件计算sectionNameKeyPath,objective-c,ios,core-data,nsfetchedresultscontroller,Objective C,Ios,Core Data,Nsfetchedresultscontroller,假设有一个名为testTable的表: (NSNumber*) numValue (NSString*) stringValue 那么假设其中有50条记录数值在每个记录中都不同。 如果我像这样创建NSFetchedResultController: NSFetchRequest *request = [[NSFetchedResultsController alloc] initWithFetchRequest: request
(NSNumber*) numValue
(NSString*) stringValue
那么假设其中有50条记录<代码>数值在每个记录中都不同。
如果我像这样创建NSFetchedResultController:
NSFetchRequest *request = [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: @"numValue"
cacheName: @"testTable"]];
NSFetchRequest *request = [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: @"numValue > 15"
cacheName: @"testTable"]];
那我就要50节了
我的问题是:
如何获得2个部分:
第一个包含numValue
小于某些x
的记录,第二个包含numValue
大于相同x
的记录
对于x=15
,它可能如下所示:
NSFetchRequest *request = [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: @"numValue"
cacheName: @"testTable"]];
NSFetchRequest *request = [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: @"numValue > 15"
cacheName: @"testTable"]];
可能的解决方案有:
numberOfSectionsInTableView:
中,我们只需查看节名并将其与x
进行比较即可。然后我们可以在tableView:numberofrowsinssection:
中查看这些名称,并计算我们需要的内容。但那也让我感觉脏兮兮的。比第一种方法更好,但仍然如此[self setFetchedResultsController: [[NSFetchedResultsController alloc]
initWithFetchRequest: request
managedObjectContext: context
sectionNameKeyPath: [NSString stringWithFormat: @"numValue.compare(%f)", x]];
但KVC合规性存在一个问题:
带有参数的方法(选择器)显然不符合KVC。
有什么解决办法吗?请参考答案
向实体添加可选属性并使其成为瞬态属性
然后创建一个getter(假设您的属性名为sectionGroup
)
现在,您可以使用sectionGroup
作为sectionNameKeyPath。请参见答案作为参考
向实体添加可选属性并使其成为瞬态属性
然后创建一个getter(假设您的属性名为sectionGroup
)
现在,您可以使用
sectionGroup
作为您的sectionNameKeyPath。我必须在OP中说我需要另一种方式,因为更改这些东西的实体感觉有点脏。我必须在OP中说我需要另一种方式,因为更改这些东西的实体感觉有点脏。