我怎样才能过滤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"]; 

希望能帮助到你 :)