0

对于配置文件屏幕,我想从 Core Data 加载等效的详细信息页面,而不必先加载表。我在核心数据中有一个包含多个用户的实体/表。但我只对提取其中一个用户(当前用户)的个人资料数据感兴趣。我想直接加载它,而不需要通过加载表和选择选择以及使用路径和索引行等的过程。一旦我得到结果,我不想将它们显示为一行,而是分配不同的字段就像在详细信息页面中一样,在不同元素中围绕页面。

谁能建议最好的方法来做到这一点?

我想我需要使用一个谓词,用用户 ID 或用户名对有问题的用户进行排序。通常我使用 NSFetchedResultsController 来执行提取,但也许有一种方法可以使用 executefetchrequest 进行更简单的提取。以下代码改编自我在 SO 上找到的内容。这是正确的方法吗?

 - (User *)userInfo:(NSDictionary *)usersList
            inManagedObjectContext:(NSManagedObjectContext *)context
{
    User *user = nil;

    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Users"];
    request.predicate = [NSPredicate predicateWithFormat:@"username = bob"];
    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"last" ascending:YES];
    request.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];

    NSError *error = nil;

    NSArray *matches = [context executeFetchRequest:request error:&error];

    if (!matches || ([matches count] > 1)) {
        // handle error
    }  else {
        user = [matches lastObject];
    }

    return user;
}
4

1 回答 1

0

你的代码有什么问题?它不做什么?

根据您的描述,您提供的代码完全符合您的要求。

至于您关于加载表格的评论,您永远不会加载表格。Core Data 是一种对象模型设计。即使您将其配置为持久保存到 SQLite,您仍然永远不会“加载表”。您正在加载一组对象。

将 Core Data 视为 ORM 将在以后给您带来更多设计问题。它是一个对象图而不是 ORM。

直接的错误是我没有调用该方法的语法。我试图用 [self userInfo:?? 在 vi​​ewDidLoad 中调用它 inManagedObjectContext:(NSManagedObjectContext *)context 但我不知道要包含什么?然而,在疯狂尝试让它工作之前,我想知道这是否是正确的方法。很高兴听到它。你能建议如何调用该方法吗?我不清楚我们在这里真正调用的字典是什么。

该方法是您定义的。您希望该词典包含什么内容?它不是 Core Data API 的一部分,它是视图控制器的一部分。

这种方法中的代码是相当标准的。针对核心数据的简单获取。

如果你没有写这个方法,那么我建议你问写它的人。

仅供参考,谓词中没有使用该字典中的任何内容。这会是家庭作业吗?

于 2015-05-23T16:05:04.680 回答