web-dev-qa-db-ja.com

NSPredicateを使用して、文字列が別の文字列と等しいかどうかを判断する

[CalCalendarStore eventPredicateWithStartDate]メソッドで返されるCalEventsのNSArrayがあります。返されたイベントから、イベントのタイトル== @"on call"(大文字と小文字を区別しない)のイベントのみを保持しようとしています。

次のコードで、タイトルincludes@"on call"のイベントを配列に保持できます( 'events'はCalEventsが入力された 'NSArray'です)。

NSPredicate *onCallPredicate = [NSPredicate predicateWithFormat:@"(SELF.title CONTAINS[c] 'on call')"];
[events filteredArrayUsingPredicate:onCallPredicate];

私は次のような述語形式の文字列を使用してみました:

@"SELF.title == 'on call'"が、これは機能していないようです。

これを行う簡単な方法はありますか?

35
Garry Pettet

[NSPredicate predicateWithFormat:@"title ==[c] 'on call'"];

[c]は、等値比較の大文字と小文字を区別しません。

106
Cory Kilger

@"self.title like[c] 'on call'"形式の述語を試してください。次のサンプルコードは2つの文字列を出力します。

NSArray* ar = [NSArray arrayWithObjects:@"on call", @"I'm on call", @"lala", @"On call", nil];
NSArray* filt = [ar filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self like[c] 'on call'"]];
NSLog([filt description]);

//Output
"on call",
"On call"
10
Vladimir