2011-05-27 37 views
1

我試圖用nspredicate來找到一個託管對象,它的attribue的值是==我想檢查一個值。NSPredicate ==查詢

我知道這個值是在我的數據模型中。

這是我迄今試過的,但結果數組總數爲零。

-(BOOL)checkIfFavouriteExists:(NSString *)data 
{ 
    BOOL returnvalue; 

    NSFetchRequest *fetchReq = [[NSFetchRequest alloc]init]; 

    NSString *attributeName = @"userid"; 
    NSString *attributeValue = data; 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == '%@'", 
           attributeName, attributeValue]; 

    //setting the predicate to the fetch request 
    [fetchReq setPredicate:predicate]; 

    [fetchReq setEntity:[NSEntityDescription entityForName:@"Favourites" inManagedObjectContext:self.managedObjectContext]]; 

    NSMutableArray *resultArray = [[NSMutableArray alloc]initWithArray:[self.managedObjectContext executeFetchRequest:fetchReq error:nil]]; 

    if([resultArray count]>0) 
    { 
     returnvalue=YES; 

    } else 
    { 
     NSLog(@"No records"); 
     returnvalue=NO; 
    } 

    return returnvalue; 
} 

編輯

這個問題似乎是與我的查詢格式。

雖然這有效嗎?

NSExpression *exprName = [NSExpression expressionForKeyPath:@"userid"]; 
NSExpression *exprVal = [NSExpression expressionForConstantValue:data]; 
NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:exprName 
                  rightExpression:exprVal 
                    modifier:NSDirectPredicateModifier 
                     type:NSEqualToPredicateOperatorType 
                    options:0]; 

我不明白爲什麼一個工作,而另一個不工作。他們都做同樣的事情對嗎?

+0

你已經用謂詞格式的單個'='嘗試過了嗎? – EmptyStack 2011-05-27 12:52:59

+0

試試這個,'[NSPredicate predicateWithFormat:@「%@ =%@」, attributeName,attributeValue]; ' – EmptyStack 2011-05-27 12:54:53

+0

@SImon,我發現我的解決方案,但我會嘗試你也:) – dubbeat 2011-05-27 12:58:52

回答

4

請勿將變量放在引號中。該documentation on Parser Basics狀態:

Single or double quoting variables (or substitution variable strings) cause %@, %K, or $variable to be interpreted as a literal in the format string and so prevent any substitution.

這應做到:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"userid == %@", attributeValue]; 

你可以閱讀更多有關Predicate Programming Guide謂詞。