2011-03-24 59 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]; 

希望這有助於我目前在我的項目中設置了核心數據,並且整個上午都在閱讀這些內容。