2011-03-24 49 views
2

在我们用下面这条SQL如何实现核心数据

其中studentName LIKE“%a”和StudentID = 1

如何,在客观c和核心数据使用setpredicate为fetchrequest做

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

问候

+0

http://stackoverflow.com/questions/2740933/nspredicate-that-is-the-equivalent-of-sqls-like – Joe 2011-03-24 15:17:29

+0

它的工作与包含[cd],但我想知道如果我通过字符串空并且只想通过ID进行搜索 – Ali 2011-03-24 16:34:43

回答

2

它曾与含有苯并[cd]但我想 知道,如果我传递的字符串 空,并希望通过ID只搜索

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

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

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

0

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

0

这是从开发人员库的一个例子

Creating Fetch Request Templates Programmatically

basicly它看起来是这样的预测使用...

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

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