从Core数据中获取不同的数据以及降序?

时间:2013-09-28 13:34:17

标签: iphone ios objective-c ipad core-data

我在创建聊天应用程序,其中我将数据保存在核心数据中。我使用以下实体,

enter image description here

我想要获取所有唯一customerno的数据,并且该数据将按messagedate的降序排列,其中还包含从其他messagetext发送的最新cmid。我想显示列表,如Facebook聊天消息列表和smiler视图。 我尝试下面的代码,

-(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编号中,但它不包含其他属性值。

我在代码中做错了什么?

2 个答案:

答案 0 :(得分:1)

根据setPropertiesToFetch方法的NSFetchRequest类参考文档:“仅当resultType设置为NSDictionaryResultType时才使用此值。”

答案 1 :(得分:0)

您需要在setPropertiesToFetch中设置要获取的表的所有属性。像

[req setPropertiesToFetch:[NSArray arrayWithObjects:[entityProperties objectForKey:@"customerno"],[entityProperties objectForKey:@"messagetext"],nil]];

这将返回带有两个值的NSDictionary。