如何在核心数据中实现它

时间:2011-03-24 15:07:11

标签: iphone objective-c core-data

在SQL中

我们使用以下子句

其中studentName如'%a'和StudentID = 1

如何使用setpredicate for fetchrequest

在目标c和核心数据中执行此操作

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

最好的问候

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

  

它包含[cd],但我想要   知道如果我传递了字符串   空,只想按ID搜索

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

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

通常,尽量避免在SQl术语中考虑核心数据。这很自然但很危险。核心数据不是SQL。实体不是表格。对象不是行。列不是属性。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。

答案 2 :(得分:0)

我同意TechZen,你应该考虑对象的核心数据,而不是sql支持。 CD使用SQL作为实现细节,不一定是定义功能。

答案 3 :(得分:0)

这是开发人员库中的一个示例

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];

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