Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSFetchedResultController。使用表达式/按条件计算sectionNameKeyPath_Objective C_Ios_Core Data_Nsfetchedresultscontroller - Fatal编程技术网

Objective c NSFetchedResultController。使用表达式/按条件计算sectionNameKeyPath

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

假设有一个名为testTable的表:

(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"]];
可能的解决方案有:

  • 我们可以像@Dima所说的那样编辑我们的实体
  • numberOfSectionsInTableView:
    中,我们只需查看节名并将其与
    x
    进行比较即可。然后我们可以在
    tableView:numberofrowsinssection:
    中查看这些名称,并计算我们需要的内容。但那也让我感觉脏兮兮的。比第一种方法更好,但仍然如此
  • 更新: 我几乎想出了第三种方法。感谢@Dima的链接。 代码如下:

    [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中说我需要另一种方式,因为更改这些东西的实体感觉有点脏。