Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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
如何将从核心数据获取的结果分组,iOS开发人员_Ios_Core Data_Nsfetchrequest - Fatal编程技术网

如何将从核心数据获取的结果分组,iOS开发人员

如何将从核心数据获取的结果分组,iOS开发人员,ios,core-data,nsfetchrequest,Ios,Core Data,Nsfetchrequest,我有一个核心数据,有一个叫做费用的实体,它类似于: 实体:费用 属性:日期、类别、金额 我的问题是,是否有可能每年或每年每月收取多少费用? 我知道如果提取是基于时间段或类别的,我可以使用NSPredicate过滤提取的结果。但是我心目中的Date属性应该按年份和月份分开,这样我就可以像SQL查询那样对它们进行分组。可以直接在fetch中这样做吗?否则,唯一的方法是将整个数据提取到NSArray,并通过NSPredicate进行一些筛选 我已经搜索了好几天,但没有找到直接的答案。现在我实际上有点相

我有一个核心数据,有一个叫做费用的实体,它类似于: 实体:费用 属性:日期、类别、金额

我的问题是,是否有可能每年或每年每月收取多少费用? 我知道如果提取是基于时间段或类别的,我可以使用NSPredicate过滤提取的结果。但是我心目中的Date属性应该按年份和月份分开,这样我就可以像SQL查询那样对它们进行分组。可以直接在fetch中这样做吗?否则,唯一的方法是将整个数据提取到NSArray,并通过NSPredicate进行一些筛选

我已经搜索了好几天,但没有找到直接的答案。现在我实际上有点相信没有直接的解决办法。但我还是想看看是否有人能为我提供更好的解决方案,因为每个开发人员都必须解决这个问题

任何建议都将不胜感激,谢谢各位:

=============================================已添加======================= 此外,就我对索引列表技术的了解而言,我希望将基于年-月的异常结果在UITableView中列出索引。我可能会根据每个索引年和月为每个数组提供费用。有更好的方法吗


我基于数据结构的想法是建立一些对多的关系,从Entityyear到多个Entityyear、month、year month到多个Entityyear month、Date、Amount。。。。。当我为索引UITableView获取每个数组时,这可能会给我带来一些方便。

再添加三个属性来存储实体中的日期组件 将日期组件分离为日、月和年,然后存储这三个条目,并且还具有一个日期属性来存储完成日期。 当您想按年或年-月提取数据时,只需使用谓词

NSPredicate *filter = [NSPredicate predicateWithFormat:@"month=%d AND year=%d",month,year];
[request setPredicate:filter];
 NSArray *results = [self.moContext executeFetchRequest:request error:nil];
 if(results.count > 0) {
                       //do your manipulations.
            }

再添加三个属性以在实体中存储日期组件 将日期组件分离为日、月和年,然后存储这三个条目,并且还具有一个日期属性来存储完成日期。 当您想按年或年-月提取数据时,只需使用谓词

NSPredicate *filter = [NSPredicate predicateWithFormat:@"month=%d AND year=%d",month,year];
[request setPredicate:filter];
 NSArray *results = [self.moContext executeFetchRequest:request error:nil];
 if(results.count > 0) {
                       //do your manipulations.
            }

您可以在Expense类中实现@readonly属性year和month,然后在谓词中使用它们。您不必单独存储这些值,只需使用NSDateComponents在getter中计算它们。

您可以在Expense类中实现@readonly properties year and month,然后在谓词中使用它们。您不必单独存储这些值,只需使用NSDateComponents在getter中计算它们。

回答得好,我以前确实考虑过,但我认为这违反了数据库表设计规则。但现在我认为核心数据并不像一个真正的数据库,尽管它也提供了关系和更方便的方式。谢谢你,Madhusudhan!回答得很好,我以前确实考虑过,但我只是认为这违反了数据库表设计规则。但现在我认为核心数据并不像一个真正的数据库,尽管它也提供了关系和更方便的方式。谢谢你,Madhusudhan!如果是这样,我可以简单地使用:NSPredicate*filter=[NSPredicate predicateWithFormat:@getMonth=%d和getYear=%d,month,year]??如果那样的话,那就太棒了!但实体中的getter方法不会被视为直接获取moContext的属性。但同样,我可以将整个数据提取到一个数组中,并通过实体的getter再次进行过滤。。。。。我认为这可能会降低性能。尽管将mre属性设置为实体也会导致这种情况。我说得对吗:@JimZ没错-如果添加只读派生属性,则可以在谓词中使用它们。效果很好。在类类别中实现它们,以便在出于某种原因重新生成托管对象类时不会覆盖它们。当然,这是以你没有特别的性能考虑为前提的。@Monolo那太好了,我会在回家后马上做一个演示。谢谢@JimZ如果您在这些派生属性上有任何侦听器,并且我怀疑某个获取控制器添加了自身,那么请记住实现KeyPathsForvaluesFecting查看当您看到这些东西工作时,它就像魔术一样:-如果是这样,我可以简单地使用:NSPredicate*filter=[NSPredicate谓词格式:@getMonth=%d和getYear=%d,month,year]??如果是这样,那就太棒了!但是Entity中的getter方法不会被视为直接获取moContext的属性。但是,我可以再次将整个数据获取到一个数组中,并通过Entity的getter再次进行过滤……我想这可能会降低性能。尽管将mre属性添加到Entity也会导致这种情况。我说得对吗:@JimZ tha正确-如果添加只读派生属性,则可以在谓词中使用它们。效果很好。在类类别中实现它们,这样当您出于某种原因重新生成托管对象类时,它们就不会被覆盖。当然,这是以您没有特别的性能考虑为前提的。@Monolo那太好了,我将示范权
回家后。谢谢@JimZ如果您在这些派生属性上有任何侦听器,并且我怀疑某个获取控制器添加了自身,那么请记住实现KeyPathsForvaluesFecting查看当您看到这些东西工作时,它就像魔术一样:-