2013-09-28 4 views
0

Я пытаюсь фильтровать контакты на основе алфавитов, что-то вроде этогофильтр CFArray с использованием предиката как NSArray

NSArray *sectionArray = [contactAdd filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", [self.friendListSection objectAtIndex:section]]]; 

Но здесь проблема contactAdd не является регулярным массивом его CFArray определяется как

@property CFArrayRef contactAdd; 

Так что этот код не работает, есть ли альтернатива использованию вышеуказанного кода для CFArray или любого другого решения для получения желаемого результата?

Примечание: Я не хочу, чтобы изменить contactAdd в обычный массив, мне нужно использовать CFArray только

ответ

4
NSArray *array = (NSArray *)CFBridgingRelease(self.contactAdd); 
NSArray *sectionArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", [self.friendListSection objectAtIndex:section]]]; 

Цитируя documentation (курсив добавлен)

CFArray является «платной «без моста» с его коллегой Фонда Какао, NSArray. Это означает, что тип Core Foundation равен взаимозаменяемым в вызове функции или метода с мостовым объектом Foundation. Поэтому в методе, где вы видите параметр NSArray *, вы можете передать его в CFArrayRef, а в функции, где вы видите параметр CFArrayRef, вы можете передать экземпляр NSArray. Это также относится к конкретным подклассам NSArray. См. «Бесконечные мостовые типы» для получения дополнительной информации о бесплатном мостовом соединении.

Дополнительная информация о мостовом литье: NSString to CFStringRef and CFStringRef to NSString in ARC?

+0

Его ошибка метания, NSLog (@ "% @", массив) отображает ( "", « ", " "и т. Д.) Сообщение об ошибке:« NSInvalidArgumentException », причина:« Невозможно выполнить операцию подстроки с чем-то, что не является строкой (lhs = rhs = z) ' – Gamerlegend

+0

Любой совет, в чем причина? – Gamerlegend

+0

Я предполагаю, что предикат ошибочен. Вы используете 'beginwith' для объекта, который не является строкой. –

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