2012-06-01 74 views
0

我需要檢查我的數組中的字符串是否爲空使用NSComparisonPredicate。正在執行的謂詞是:string MATCHES [c]「」 但結果中沒有顯示,它沒有列出我的空字符串。 我的謂詞是錯誤的還是隻有另一種用NSPredicate處理空字符串的方法?NSComparisonPredicate找到空字符串

+2

你試過string.length減== 0? – rdelmar

+0

我曾嘗試使用此謂詞比較長度:謂詞= [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForConstantValue:[NSNumber numberWithInt:string.length]] – icocoa

+0

而且,這是否有效? – rdelmar

回答

1

由於rdelmar上面提到的,對於這樣的任務,你應該只是string.length==0

0

檢查字符串的長度,你可以使用塊篩選陣列。我會建議使用NSPredicate的方法。下面是一些示例代碼:

//creating array 
NSArray *myArray = [NSArray arrayWithObjects:@"a", @"b", @"", @"c", nil]; 

//filtering 
NSIndexSet *iset = [myArray indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
    NSString *str = obj; 
    return !str.length; 
} 
]; 

//creating my result array with empty strings 
NSArray *emptyStrings = [myArray objectsAtIndexes:iset]; 

//logging all strings 
for (NSString *str in myArray) { 
    NSLog(@"string: %@", str); 
} 

//logging empty strings 
for (NSString *str in emptyStrings) { 
    NSLog(@"empty string: %@", str); 
} 

編輯: 如果你確實需要使用NSComparisonPredicate,那就是:

NSExpression *left = [NSExpression expressionForKeyPath:@"length"]; 
NSExpression *right = [NSExpression expressionForConstantValue:[NSNumber numberWithInt:0]]; 

NSComparisonPredicateModifier modifier = NSDirectPredicateModifier; 
NSPredicateOperatorType operator = NSEqualToPredicateOperatorType; 

NSPredicate *predicate = [NSComparisonPredicate predicateWithLeftExpression:left rightExpression:right modifier:modifier type:operator options:0]; 

NSArray *filtered = [myArray filteredArrayUsingPredicate:predicate]; 
+0

問題是我必須爲此使用NSPredicate。這是我試着用你建議的長度:predicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForConstantValue:[NSNumber numberWithInt:string.length]]但它只是返回我的數組中的所有字符串。 – icocoa

+0

@icocoa檢查我編輯的答案。 – Adam

+0

感謝亞當,這將工作,但我只是意識到,實際的問題是。謂詞= [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForConstantValue:[NSNumber的numberWithInt:expressionKeyPath.length]] rightExpression:[NSExpression expressionForConstantValue:[NSNumber的numberWithInt:0]] 改性劑:NSDirectPredicateModifier 類型:NSEqualToPredicateOperatorType選項:選項];表達式關鍵路徑是核心數據屬性,而不是實際的字符串,其長度我想比較但是它的值。對此有任何想法? – icocoa

1

我不知道爲什麼你使用NSComparisonPredicate,我我從來沒有使用過那個,所以我不熟悉它。你有沒有嘗試過predicateWithFormat?

NSPredicate *pred = [NSPredicate predicateWithFormat:@"self.length == 0"]; 

不清楚你想如何使用謂詞,但是如果你使用它來過濾一個數組,它應該可以工作。

如果你想知道你的數組中的空字符串的索引,那麼你可以使用indexesOfObjectsPassingTest:像這樣:

NSIndexSet *indxs = [array indexesOfObjectsPassingTest:^BOOL(NSString *aString, NSUInteger idx, BOOL *stop) { 
     return aString.length == 0; 
    }]; 
    NSLog(@"%@",indxs);