2013-09-28 42 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「免費搭橋」。這意味着核心基金會類型爲可互換在帶有橋接基礎對象的函數或方法調用中。因此,在看到NSArray *參數的方法中,可以傳入CFArrayRef,並且在看到CFArrayRef參數的函數中,可以傳入NSArray實例。這也適用於NSArray的具體子類。有關免費橋接的更多信息,請參閱「免費橋接類型」。

約橋接鑄件的額外信息: NSString to CFStringRef and CFStringRef to NSString in ARC?

+0

其投擲的錯誤,的NSLog(@ 「%@」,陣列)顯示器( 「」, 「「, 」「等等)錯誤消息:'NSInvalidArgumentException',原因:'不能對某個不是字符串的東西進行子字符串操作(lhs = rhs = z)' – Gamerlegend

+0

有什麼建議,是什麼原因? – Gamerlegend

+0

我的猜測是謂詞錯誤。你在一個不是字符串的對象上使用'startswith'。 –