如何在核心数据中实现它

Posted

技术标签:

【中文标题】如何在核心数据中实现它【英文标题】:how to implement that in core data 【发布时间】:2011-03-24 15:07:10 【问题描述】:

在 SQL 中我们使用以下子句

其中 studentName like '%a' and StudentID = 1

如何在目标 c 和核心数据中使用 setpredicate 进行 fetchrequest

我只有名称@“a”和ID @“1”的两个输入部分

最好的问候

【问题讨论】:

***.com/questions/2740933/… 它与 contains[cd] 一起使用,但我想知道如果我将字符串传递为空并且只想按 ID 搜索会怎样 【参考方案1】:

看看Predicate Programming Guide。

我还想添加Core Data Programming Guide - Fetching Managed Objects。

【讨论】:

【参考方案2】:

它与 contains[cd] 一起使用,但我想要 知道如果我传递了字符串怎么办 为空,只想按 ID 搜索

通常,您不会在 fetch 谓词中使用空字符串,因为核心数据会尝试匹配空字符串。相反,您应该针对不同的情况创建不同的获取请求。获取请求是轻量级对象,可以存储在数组(甚至数据模型本身)中。

如果是这种情况,您将测试空字符串,如果为真,则使用仅查找 StudentID 的提取谓词。

一般来说,尽量避免用 SQL 术语来思考 Core Data。这很自然,但很危险。核心数据不是 SQL。实体不是表格。对象不是行。列不是属性。 Core Data 是一个对象图管理系统,它可能会也可能不会持久化对象图,并且可能会或可能不会在幕后使用 SQL 来做到这一点。试图用 SQL 术语来思考 Core Data 会导致您完全误解 Core Data 并导致很多痛苦和浪费时间。

【讨论】:

【参考方案3】:

我同意 TechZen 的观点,您应该从对象的角度考虑核心数据,而不是支持 sql。 CD 使用 SQL 作为实现细节,而不一定是定义特性。

【讨论】:

【参考方案4】:

这是来自开发者库的示例

Creating Fetch Request Templates Programmatically

基本上它看起来像这样使用谓词...

NSManagedObjectModel *model = <#Get a model#>;
NSFetchRequest *requestTemplate = [[NSFetchRequest alloc] init];
NSEntityDescription *publicationEntity =
    [[model entitiesByName] objectForKey:@"Publication"];
[requestTemplate setEntity:publicationEntity];

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:
    @"(mainAuthor.firstName like[cd] $FIRST_NAME) AND \
        (mainAuthor.lastName like[cd] $LAST_NAME) AND \
        (publicationDate > $DATE)"];
[requestTemplate setPredicate:predicateTemplate];

[model setFetchRequestTemplate:requestTemplate
    forName:@"PublicationsForAuthorSinceDate"];
[requestTemplate release];

因此,通过查看您可能会喜欢这样的事情

NSPredicate *predicateTemplate = [NSPredicate predicateWithFormat:
        @"(mainAuthor.firstName like[cd] $FIRST_NAME) AND \
            (mainAuthor.lastName like[cd] $LAST_NAME) AND \
            (publicationDate > $DATE)"];
    [requestTemplate setPredicate:predicateTemplate];

希望这有助于我目前正在我的项目中设置核心数据,并且整个上午都在阅读这些内容。

【讨论】:

以上是关于如何在核心数据中实现它的主要内容,如果未能解决你的问题,请参考以下文章

什么是滚动总和以及如何在 Informatica 中实现它,我的要求如下?

具有 2 个属性的背包算法。如何在 3d 数组中实现它?

线程池是如何工作的,以及如何在 NodeJS 之类的 async/await 环境中实现它?

如何计算两个图像的相似度百分比,如下图我想在我的项目中实现它

在 C++ 中实现归并排序

如何在 laravel 中实现 vuetify?