0

我正在尝试根据字母过滤我的联系人,就像这样

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

但这里的问题是 contactAdd 不是一个常规数组,它的 CFArray 定义为

@property  CFArrayRef contactAdd;

所以这段代码不起作用,是否有任何替代方法可以将上述代码用于 CFArray 或任何其他解决方案来获得所需的结果?

注意:我不想将我的联系人更改为常规数组,我只需要使用 CFArray

4

1 回答 1

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

引用文档(强调添加)

CFArray与 Cocoa Foundation 对应的NSArray. 这意味着 Core Foundation 类型在函数或方法调用中可以与桥接的 Foundation 对象互换。因此,在看到NSArray *参数的方法中,可以传入 a CFArrayRef,在看到CFArrayRef参数的函数中,可以传入NSArray实例。这也适用于NSArray. 有关免费桥接的更多信息,请参阅“免费桥接类型”。

关于桥接转换的额外信息: NSString 到 CFStringRef 和 CFStringRef 到 ARC 中的 NSString?

于 2013-09-28T06:09:25.940 回答