2010-09-05 65 views
4

有人可以幫我定義一個謂詞,它只返回NSManagedObject的「字母」屬性長度在一定範圍內的謂詞嗎?NSManagedObject的字符串屬性的長度爲NSPredicate

下面是我一直在嘗試的例子,我有一種感覺,它是letters.length表示法,我也試過了kvc字母@長度沒有成功..我做錯了什麼?

NSManagedObjectContext *context = ...; 
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Word" inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"letters" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"letters.length BETWEEN %@", [NSArray arrayWithObjects: [NSNumber numberWithInt:5], [NSNumber numberWithInt:20], nil]]; 
[fetchRequest setPredicate:predicate]; 

NSUInteger limit = 20; 
[fetchRequest setFetchLimit:limit]; 

NSError *error = nil; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error]; 

回答

6

不知道這個代碼片斷是如何表現明智,但這裏是我的回答你的問題:

NSString *attributeName = @"letters"; 
NSString *attributeValue = [NSString stringWithFormat:@".{%d,%d}", 5, 20]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K MATCHES %@", attributeName, attributeValue]; 
[fetchRequest setPredicate:predicate]; 

喬斯。

+3

這應該是被接受的答案。 – 2013-05-16 08:57:29

4

我有一些壞消息。你不能這樣做。 NSPredicate中沒有字符串的長度屬性(我已經能夠找到)。

我建議你做的是添加一個屬性,爲您設置字母屬性時設置的託管對象中存儲的字符串的長度。然後,您可以對該屬性執行查詢並返回所需的值。

+0

謝謝約書亞。同意。 – jbg 2010-09-05 03:48:32

3

萬一有人正在尋找一種方式來測試一個字符串是否具有使用NSPredicate長度, possible

+3

請注意,您所鏈接的解決方案無法與核心數據一起使用,正如SO所要求的那樣。 – 2012-08-31 23:08:42