Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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/9/ios/97.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
Iphone 从核心数据获取分组数据_Iphone_Ios_Objective C_Sqlite_Core Data - Fatal编程技术网

Iphone 从核心数据获取分组数据

Iphone 从核心数据获取分组数据,iphone,ios,objective-c,sqlite,core-data,Iphone,Ios,Objective C,Sqlite,Core Data,我在消息表中有数据。这些信息是某种聊天信息。现在我想以这样的对话形式获取数据 假设我们有a、b、c、d、e、f和m个用户m是给我自己的。现在有来自a、b、c、d、e、f和m的发送方的消息,接收方也是如此。所有消息都有m作为发送者或接收者,以及来自其他用户的一个对象。现在,我希望将数据分组为 A组 将消息发送至a或从a接收的所有消息 B组 具有发送至b或从b接收的消息的所有消息 C组 将消息发送到c或从c接收的所有消息 等等…… 谁能建议我怎么做。我研究了一些问题,但找不到答案。有人帮忙都是值得的

我在消息表中有数据。这些信息是某种聊天信息。现在我想以这样的对话形式获取数据

假设我们有a、b、c、d、e、f和m个用户m是给我自己的。现在有来自a、b、c、d、e、fm的发送方的消息,接收方也是如此。所有消息都有m作为发送者或接收者,以及来自其他用户的一个对象。现在,我希望将数据分组为

A组

将消息发送至a或从a接收的所有消息

B组

具有发送至b或从b接收的消息的所有消息

C组

将消息发送到c或从c接收的所有消息

等等……


谁能建议我怎么做。我研究了一些问题,但找不到答案。有人帮忙都是值得的

如果在viewController结果中,则可以使用NSFetchedresultscontroller。此对象包含结果数据

中的一个段和一行,使用已获取的结果控制器,您必须考虑一些消息将不止一次包含。 1) 获取
用户
实体,按
名称排序

2) 节数:
fetchedObjects.count

3) 节中的行数:

NSSet *allMessages = [user.receivedMessages setByAddingObjectsFromSet:user.sentMessages];
return allMessages.count;
4) 填充单元格:

NSSet *allMessages = [user.receivedMessages setByAddingObjectsFromSet:user.sentMessages];
NSArray *sorted = [allMessages sortedArrayUsingDescriptors:@[[NSSortDescriptor 
            sortDescriptorWithKey:@"message.topic" ascending:YES]]];
Message *m = sorted[indexPath.row];

这可以通过向
User
添加一个瞬态属性来简化,该属性返回排序后的
allMessages
。请不要认为直接在datasource方法中这样做不是很有效,我只是把它放在这里来说明这一点

你需要A、B、C组的所有数据吗。。。在单个排序数组中?我只想发出一个请求,然后对数据进行分组。在单个数组中,它将仅被排序。我需要Array A包含组A,Array B包含组B等的对象您可以更改数据模型(就像让所有消息都有一个对应的
和一个指示消息是否已发送/接收的标志)。然后,您可以简单地通过
对应项[[NSFetchedResultsController alloc]initWithFetchRequest:managedObjectContext:sectionNameKeyPath:@“sectionKeyPath”进行分组cacheName:nil];sectionKeyPath可以是CoreData中的“transient”属性,您可以在Getter assessor-(NSString*)sectionKeyPath{//中计算它的值,如果发送方或接收方是},则在peusdo代码中返回一个不起作用的值。要执行transient属性,您必须获取消息,并且由于重复而导致每个部分中的行数错误。通常情况下,消息将被包含多次。结果是实体的笛卡尔积。但也许我不明白这个问题,我的英语不是很好。语言可能是个问题,但母语也是;-)。FRC无法获取笛卡尔积(至少在获取托管对象时是如此)。每个实体实例只包含一次。