36

I have an NSArray of CalEvents returned with the [CalCalendarStore eventPredicateWithStartDate] method. From the events returned, I am trying to keep only those in which the title of the event == @"on call" (case-insensitive).

I am able to keep in the array those events whose title includes @"on call" with the following code (where 'events' is a 'NSArray' populated with CalEvents):

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

I've tried using a predicate format string like:

@"SELF.title == 'on call'" but this doesn't seem to work.

Is there an easier way to do this?

KAR
  • 3,303
  • 3
  • 27
  • 50
Garry Pettet
  • 8,096
  • 22
  • 65
  • 103

2 Answers2

109

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

(The [c] makes the equality comparison case-insensitive.)

Quuxplusone
  • 23,928
  • 8
  • 94
  • 159
Cory Kilger
  • 13,034
  • 3
  • 33
  • 24
10

Try predicate with format @"self.title like[c] 'on call'". The following sample code outputs 2 strings:

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"
Vladimir
  • 170,431
  • 36
  • 387
  • 313
  • 3
    Is there a difference between using `==` and `like` for string comparisons? – Garry Pettet Jun 03 '10 at 17:33
  • Looks like in your case the work they same. But if you want to use wildcards in string comparison then '==' won't work and you'll need to use LIKE instead. – Vladimir Jun 03 '10 at 19:34