Iphone 从核心数据获取分组数据
我在消息表中有数据。这些信息是某种聊天信息。现在我想以这样的对话形式获取数据 假设我们有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接收的所有消息 等等……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接收的所有消息 等等…… 谁能建议我怎么做。我研究了一些问题,但找不到答案。有人帮忙都是值得的
谁能建议我怎么做。我研究了一些问题,但找不到答案。有人帮忙都是值得的 如果在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无法获取笛卡尔积(至少在获取托管对象时是如此)。每个实体实例只包含一次。