- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 iPhone 上制作一个想法的原型(prototype),但我正处于 SQLite 与 CoreData 的十字路口。主要原因是我似乎无法弄清楚如何对核心数据进行分组。
本质上我想显示按用户名分组的最新发布的项目。在 SQL 语句中确实很容易做到,但我无法使其在核心数据中工作。我想既然我要开始一个新的应用程序,我不妨尝试让核心数据发挥作用,但这部分是一个主要障碍。
我向 fetchrequest 添加了一个谓词,但这只提供了单个最近添加的记录,而不是每个用户最近添加的记录。
此时数据模型非常基础。它使用以下字段: 用户名(字符串),帖子(字符串),创建(日期时间)
长话短说,CoreData 可以进行这些类型的查询吗?我想如果 SQLite 是在幕后,就必须有某种方法来做到这一点。
最佳答案
首先,不要将 Core Data 视为执行 SQL 的另一种方式。 SQL 并不是 Core Data 的“底层”。核心数据处理对象。实体描述不是表,实体实例也不是记录。使用 Core Data 进行编程与 SQL 无关,它只是使用 SQL 作为几种可能的持久存储类型之一。您不直接处理它,并且永远不应该用 SQL 术语来考虑核心数据。
这就是疯狂。
您需要喝大量的龙舌兰酒并反复敲击自己的头部,直到您忘记您所知道的有关 SQL 的一切。否则,您最终得到的对象图只不过是一个大的电子表格。
有多种方法可以在 Core Data 中实现您想要的目标。通常,您会使用复合谓词构建 fetch,该谓词将返回特定用户在特定日期范围内发布的所有帖子。获取结果 Controller 对此特别方便。
最简单的方法是设置对象图,如下所示:
UserEntity
--Attribute username
--Relationship post <-->> PostEntity
PostEntity
--Attribute creationDate
--Attribute content
-- Relationship user <<--> UserEntity
然后在你的 UserEntity 类中有一个像这样的方法:
- (NSArray *) mostRecentPost{
NSPredicate *recentPred=[NSPredicate predicateWithFormat:@"creationDate>%@", [NSDate dateWithTimeIntervalSinceNow:-(60*60*24)]];
NSSet *recentSet=[self.post filteredSetUsingPredicate:recentPred];
NSSortDescriptor *dateSort=[[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO];
NSArray *returnArray=[[recentSet allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:dateSort]];
return returnArray;
}
当您想要按日期排序的特定用户的最新帖子列表时,只需调用:
NSArray *arrayForDisplay=[aUserEntityClassInstance mostRecentPost];
编辑:
...do I just pass each post block of data (content,creationDate) to the post entity? Do I also pass the username to the post entity? How does the user entity know when to create a new user?
让我用伪代码来编写它。您有两个类定义了 userObj 和 postObj 的实例。当有新帖子出现时,您:
Parse inputPost for a user;
Search existing userObj for that name;
if userObj with name does not exist
create new userObj;
set userObj.userName to name;
else
return the existing userObj that matches the name;
Parse inputPost for creation date and content;
Search post of chosen userObj;
if an exiting post does not match content or creation date
create new postObj
set postObj.creationDate to creation date;
set postObj,content to content;
set postObj.user to userObj; // the reciprocal in userObj is created automatically
else // most likely ignore as duplicate
您有单独的 userObj 和 postObj,因为虽然每个帖子都是唯一的,但每个用户可能有很多帖子。
要掌握的重要概念是处理对象,即数据和逻辑的封装实例。这不仅仅是数据库中的行和列。例如,您可以编写托管对象子类,其中单个实例可以决定是否与另一个类的实例形成关系,除非达到该对象的特定内部状态。数据库中的记录不具有这种逻辑或自治性。
掌握使用对象图进行数据模型的最佳方法是不仅忽略数据库,还忽略核心数据本身。相反,开始编写一个小型测试应用程序,在其中手动编写所有数据模型类。不必详细说明每个类的几个属性以及对其他类的某种引用。考虑一下如何将数据解析到每个类,将类及其数据链接在一起,然后将其返回。手动执行一两次,对象图的性质就会变得显而易见。
关于objective-c - 对 Core Data 数据结果进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2350304/
您好,我正在处理 BIRT 报告。我有一个查询,我必须对父级的重复数据进行分组,但子级也不能分组! 在我的查询中: item 是父项,item_ledger_entry 是子项。我有来自 item.N
我正在使用 GA API。 这是针对 MCF 目标报告(底部)的标准目标完成指标表(顶部) 看一下这个: 总数加起来 (12,238),但看看按 channel 分组的分割有多么不同!我以为这些会很接
我正在开发一个流量计数器,我想获得 IP 和重复计数,但是如何? 就像是 :select ip, count(ip) from Redirect 返回 : null total ip count 重定
我尝试编写一个正则表达式来匹配条件表达式,例如: a!=2 1+2=2+a 我尝试提取运算符。我当前的正则表达式是“.+([!=<>]+).+” 但问题是匹配器总是尝试匹配组中可能的最短字符串
在 MS Transact SQL 中,假设我有一个这样的表(订单): Order Date Order Total Customer # 09/30/2008 8
我想按 m.ID 分组,并对每个 m.id 求和 (pm.amount_construction* prod.anzahl) 实际上我有以下结果: Meterial_id | amount_const
我想根据多列中的值对值进行分组。这是一个例子: 我想得到输出: {{-30,-50,20},{-20,30,60},{-30,NULL or other value, 20}} 我设法到达: SELE
我正在尝试找出运行此查询的最佳方式。我基本上需要返回在我们的系统中只下了一个订单的客户的“登录”字段列表(登录字段基本上是客户 ID/ key )。 我们系统的一些背景...... 客户在同一日期下的
给定以下mysql结果集: id code name importance '1234', 'ID-CS-B', 'Chocolate Sauce'
大家好,我的数据框中有以下列: LC_REF 1 DT 16 2C 2 DT 16 2C 3 DT 16 2C 1 DT 16 3C 6 DT 16 3C 3
我有这样的 mongoDB 集合 { "_id" : "EkKTRrpH4FY9AuRLj", "stage" : 10, }, { "_id" : "EkKTRrpH4FY9
假设我有一组数据对,其中 index 0 是值,index 1 是类型: input = [ ('11013331', 'KAT'), ('9085267',
java中用stream进行去重,排序,分组 一、distinct 1. 八大基本数据类型 List collect = ListUtil.of(1, 2, 3, 1, 2).stream().fil
基本上,我从 TABLE_A 中的这个开始 France - 100 France - 200 France - 300 Mexico - 50 Mexico - 50 Mexico - 56 Pol
我希望这个正则表达式 ([A-Z]+)$ 将选择此示例中的最后一次出现: AB.012.00.022ABC-1 AB.013.00.022AB-1 AB.014.00.022ABAB-1 但我没有匹配
我创建了一个数据透视表,但数据没有组合在一起。 任何人都可以帮助我获得所需的格式吗? 我为获取数据透视表而编写的查询: DECLARE @cols AS NVARCHAR(MAX), -- f
我想按时间段(月,周,日,小时,...)选择计数和分组。例如,我想选择行数并将它们按 24 小时分组。 我的表创建如下。日期是时间戳。 CREATE TABLE MSG ( MSG_ID dec
在 SQL Server 2005 中,我有一个包含如下数据的表: WTN------------Date 555-111-1212 2009-01-01 555-111-1212 2009-
题 假设我有 k 个标量列,如果它们沿着每列彼此在一定距离内,我想对它们进行分组。 假设简单 k 是 2 并且它们是我唯一的列。 pd.DataFrame(list(zip(sorted(choice
问题 在以下数据框中 df : import random import pandas as pd random.seed(999) sz = 50 qty = {'one': 1, 'two': 2
我是一名优秀的程序员,十分优秀!