2010-06-03 14 views
34

[CalCalendarStore eventPredicateWithStartDate] yöntemiyle döndürülen CalEvents'ım var. Geri döndürülen olaylardan, yalnızca olayın başlığının == @"on call" (büyük/küçük harf duyarsız) olduğu yerlere devam etmeye çalışıyorum. DenedimBir dizenin başka bir dizgeye eşit olup olmadığını belirlemek için NSPredicate kullanma

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

: Ben dizide Başlığını ('olaylar' CalEvents ile doldurulan bir 'NSArray' dir) Aşağıdaki kod ile@"on call" içeren bu etkinlikleri tutmak mümkün duyuyorum

Aşağıdaki gibi bir biçimlendirme biçimi dizesi kullanarak:

@"SELF.title == 'on call'" ancak bu işe yaramaz.

Bunu yapmanın daha kolay bir yolu var mı?

cevap

99

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

([c] eşitlik karşılaştırma harf duyarsız hale getirir.) Deneyin formatında @"self.title like[c] 'on call'" ile

+11

+1, her ne kadar küçük harf duyarsız hale getirmek için '==' sonra '[c]' değiştiricisini atabilirsiniz. –

+1

Büyük/küçük harfe duyarlı olmayacak şekilde düzenlenmiştir. –

+0

Sadece merak ediyorum, MATCH [n] herhangi bir (*?) Joker karakter kullanılmadan kullanıldığında == için çalışacak mı? – Samuel

10

deneyin yüklemi. Aşağıdaki örnek kod, 2 dizeleri:

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" 
+3

Dize karşılaştırmaları için '==' ve 'like' kullanımı arasında bir fark var mı? – Garry

+0

Örneğinizdeki durum aynı görünüyor. Ancak joker karakterleri dize karşılaştırmasında kullanmak istiyorsanız '==' çalışmayacaktır ve bunun yerine LIKE kullanmanız gerekecektir. – Vladimir

İlgili konular