2012-11-11 54 views
1

我想弄清楚NSPredicate,將搜索我的核心數據爲開頭的話:NSPredicate和BeginsWith

例如: 描述字段中的核心數據有文字是這樣的:

My name is Mike 
My name is Moe 
My name is Peter 
My name is George 

如果我搜索「我的名字是」我需要得到3線 如果我搜索「我的名字是M」我需要得到第一個2線

我嘗試下面的代碼,但不能得到我需要的。我想我需要一個正則表達式,但不知道如何去做。

[NSPredicate predicateWithFormat:@"desc beginswith [cd] %@",word]; 
+0

謂詞很好。什麼是實際問題? –

+0

好吧,當我輸入時,我怎樣才能比較每個單詞?如果我輸入「我的」,它需要找到任何單詞開始的字符串或匹配「我的」,然後當我鍵入第二個單詞「名稱」它需要找到「我的」,任何單詞以「名稱」開頭,所以向前? – SMA2012

+0

比你應該建立一些方法給你的結果。也許你可以拆分你輸入的字符串並在謂詞對象中使用它們?我會更新我的答案。 – yoeriboven

回答

2

我最近這樣做了,工作得很好。試試看。我看到我沒有[cd]beginswith,但是沒有contains。你可以試試看。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains %@", textField.text]; 
NSArray *list = [allWords filteredArrayUsingPredicate:predicate]; 

for(NSString *word in list){ 
    NSLog(@"%@",word); 
} 

閱讀起點文章的評論後:

首先,你應該在字符串中從文本框分裂的話:

NSArray *myWords = [textField.text componentsSeparatedByString:@" "]; 

然後做同樣的像你第一次會:

for(NSString *wordFromTextField in myWords){ 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains %@", wordFromTextField]; 
    NSArray *list = [allWords filteredArrayUsingPredicate:predicate]; 

    for(NSString *word in list){ 
     NSLog(@"%@",word); 
    } 
} 

Ins你可以把它們添加到一個數組當然NS的記錄單詞。

+0

謝謝。我已經把它分開了。我在做NSPredicate predicateWithFormat:@「desc beginningwith [cd]%@ AND desc beginningwith [cd]%@ AND ...」,words [0],words [1],words [2] ..]。它只能處理數組中的第一個單詞,它會在空格並輸入更多單詞之後停止。我不知道我怎樣才能完成你的數組循環與一個提取請求? – SMA2012

+0

我通過玩你的建議解決了它。我用NSCompoundPredicate。 NSMutableArray * subpredicates = [NSMutableArray array]; NSPredicate * pred = [NSPredicate predicateWithFormat:@「ColumnName contains [cd]%@」,token];其中,NSPredicate * pred = [NSPredicate謂詞]。 [subpredicates addObject:pred]; } req.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];我會接受你的答案,因爲你讓我找到了正確的解決方案。 – SMA2012

+0

偉大的我可以幫助你! – yoeriboven