我怎样才能过滤NSMutableArray由非字母字符的名字
我想过滤数组,其中名称以非字母字符开头。 我想在表视图的不同部分下显示firstName以非字母字符开头的联系人。 我尝试了下面的代码,但它崩溃了,请find下面的原因:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT(firstName BEGINSWITH[c] %@)",arrIndex]; //where arrIndex is the array of alphabetical characeters. NSArray *arrContacts = [arrayTotalContacts filteredArrayUsingPredicate:predicate];
终止应用程序,由于未捕获的exception“NSInvalidArgumentException”,原因:'不能做一个string操作的东西不是一个string(lhs = iPhone rhs =(A,B,C,D,E,F,G,H ,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z)
arrayTotalContacts有以下数据:
( { firstName = iPhone; lastName = ""; }, { firstName = Madhu; lastName = ""; }, { firstName = "Swa"; lastName = ""; }, { firstName = TechV; lastName = ""; }, { firstName = Vedika; lastName = Vt; } )
您可以使用正则expression式与Core Data谓词:
[NSPredicate predicateWithFormat:@"NOT (firstName MATCHES %@)", @"^[A-Za-z].*"]
其中^[A-Za-z].*
是以AZ或az开始的所有string的正则expression式。 为了使其与外语字母(例如“Ä”)一起使用,请使用Unicode属性名称:
[NSPredicate predicateWithFormat:@"NOT(firstName MATCHES %@)", @"^\\p{Letter}.*"]
这里^\\p{Letter}.*
是以字母开头的所有string的正则expression式。
但是,如果这是一个表视图,你最好使用一个提取的结果控制器及其sectionNameKeyPath
参数。 例如在这里看到:
- 带有由string的第一个字母创build的部分的NSFetchedResultsController
对于一些例子如何根据首字母来组合表视图。 应该可以修改代码,将所有不以字母开头的名称分组到一个单独的组中。
试试这个,
NSArray * arrContacts = [arrayTotalContacts valueForKeyPath:@"firstName"];
希望能帮助到你 :)