【问题标题】: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 数字中,但它不包含其他属性值。

我在代码中做错了什么?

【问题讨论】:

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


    【解决方案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顺序获取消息文本。
      猜你喜欢
      • 2016-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多