2013-12-12 3 views
2

Я хочу отфильтровать массив, где имя начинается с не-алфавитных символов. Я хочу отображать контакты, где firstName начинается с не-алфавитных символов в другом разделе в виде таблицы. Я попытался ниже кода, но сбой, пожалуйста, найти причину ниже:Как я могу фильтровать NSMutableArray с помощью firstName с не-алфавитными символами

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT(firstName BEGINSWITH[c] %@)",arrIndex]; //where arrIndex is the array of alphabetical characeters. 
    NSArray *arrContacts = [arrayTotalContacts filteredArrayUsingPredicate:predicate]; 

Нагрузочного приложение из-за неперехваченное исключение «NSInvalidArgumentException», причина: «Не удается сделать операцию подстроки с чем-то, что не является строкой (LHS = iPhone RHS = ( А, В, С, Д, Е, Ж, G, Н, я, Дж, К, л, М, Н, вывода , Р, Q, R, S, Т, U, В, Вт, Х, Y, Z ))»

arrayTotalContacts имеет ниже данные:

(
{ 
    firstName = iPhone; 
    lastName = ""; 
}, 
{ 
    firstName = Madhu; 
    lastName = ""; 
}, 
{ 
    firstName = "Swa"; 
    lastName = ""; 
}, 
{ 
    firstName = TechV; 
    lastName = ""; 
}, 
{ 
    firstName = Vedika; 
    lastName = Vt; 
} 
) 
+0

Edit вас вопросу с источником данными. – Tirth

+0

@ Реформатор: Я редактировал вопрос с данными. –

ответ

2

Вы можете использовать регулярное выражение с предикатом Core Data:

[NSPredicate predicateWithFormat:@"NOT (firstName MATCHES %@)", @"^[A-Za-z].*"] 

где ^[A-Za-z].* является регулярным выражением для всех строк, начинающихся с A-Z или a-z. Чтобы заставить его работать с письмами иностранных языков, а также (например, «А»), используйте имя свойства Unicode:

[NSPredicate predicateWithFormat:@"NOT(firstName MATCHES %@)", @"^\\p{Letter}.*"] 

Здесь ^\\p{Letter}.* является регулярным выражением для всех строк, которые начинаются с буквой.

Но если это предназначено для просмотра таблицы, вы можете лучше использовать выбранный контроллер результатов и его параметр sectionNameKeyPath. Смотри, например, здесь:

для некоторых примеров, как группировать вид таблицы в соответствии с начальной буквой. Это должно быть возможно изменить код, чтобы сгруппировать все имена, которые не начинаются с буквы, в отдельной группой.

+0

Это работает отлично для меня, но если имя пуста, я не получаю этот объект в результате, я хочу, чтобы этот объект в результате, как я могу его исправить? –

+0

@PalchuriSudheerKumar: Я обновил ответ, теперь он должен работать и с пустой строкой. –

+0

Отлично. Работает нормально. Спасибо, Мартин. –

0

Попробуйте это,

NSArray * arrContacts = [arrayTotalContacts valueForKeyPath:@"firstName"]; 

Надеется, что это помогает :)

 Смежные вопросы

  • Нет связанных вопросов^_^