从核心数据中获取不同的数据以及降序?
Posted
技术标签:
【中文标题】从核心数据中获取不同的数据以及降序?【英文标题】:Fetch distinct data from Core data alongwith descending order? 【发布时间】:2013-09-28 13:34:17 【问题描述】:我创建了聊天应用程序,其中我将数据保存在核心数据中。我使用以下实体,
我想获取所有唯一customerno
的数据,并且该数据将按messagedate
的降序排列,还包含从其他cmid
发送的最新messagetext
。我想显示列表像 facebook 聊天消息列表和微笑视图。
我尝试以下代码,
-(NSArray *)getAllInstanceMessages
NSError *error = nil;
NSFetchRequest * req = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"IMDetails" inManagedObjectContext:theManageContext];
[req setPredicate:[NSPredicate predicateWithFormat:@"cmid=%@", theCmID]];
NSDictionary *entityProperties = [entity propertiesByName];
[req setEntity:entity];
[req setReturnsDistinctResults:YES];
[req setResultType:NSDictionaryResultType];
[req setPropertiesToFetch:[NSArray arrayWithObject:[entityProperties objectForKey:@"customerno"]]];
[req setSortDescriptors:[NSArray arrayWithObject:[[NSSortDescriptor alloc] initWithKey:@"messagedate" ascending:NO]]];
NSArray *result = [theManageContext executeFetchRequest:req error:&error];
if(error)
NSLog(@"%s, %@", __FUNCTION__, [error localizedDescription]);
return nil;
return result;
上面的代码给出了我的以下输出,
Printing description of result:
<_PFArray 0xa3cda70>(
customerno = CN00001;
customerno = CN00002;
customerno = CN00003;
)
我想要完整的数据以及这个唯一的数字,我的意思是包含唯一数据的字典/ManagedObject 数组,假设在上面的 CN0001 数字中,但它不包含其他属性值。
我在代码中做错了什么?
【问题讨论】:
【参考方案1】:根据 setPropertiesToFetch 方法的 NSFetchRequest 类参考文档:“此值仅在 resultType 设置为 NSDictionaryResultType 时使用。”
【讨论】:
【参考方案2】:您需要在 setPropertiesToFetch 中设置您想要获取的表的所有属性。喜欢
[req setPropertiesToFetch:[NSArray arrayWithObjects:[entityProperties objectForKey:@"customerno"],[entityProperties objectForKey:@"messagetext"],nil]];
这将返回具有两个值的 NSDictionary。
【讨论】:
你的建议我在问这个问题之前就试过了。上述行不影响唯一性。你的消息很少是唯一的,所以上面的行给了我同一病人的所有数据的结果,我不会那样做。 以上结果我使用这个 [req setPropertiesToFetch:[NSArray arrayWithObjects:[entityProperties objectForKey:@"customerno"], [entityProperties objectForKey:@"messagetext"],nil]]; 在看到结果集后,一件事是清除您的表格包含所有 messageText 数据。 是的。那是我不想要的。我想要拥有最新消息记录的唯一客户。 在那种情况下,有解决方案1:在表中应用规范化或制作两个获取语句,首先获取所有唯一用户,然后按messageDate顺序获取消息文本。以上是关于从核心数据中获取不同的数据以及降序?的主要内容,如果未能解决你的问题,请参考以下文章