【问题标题】:Adding ABRecordRef to NSMutableArray causes error about requiring bridged cast将 ABRecordRef 添加到 NSMutableArray 会导致有关需要桥接强制转换的错误
【发布时间】:2012-05-02 19:25:27
【问题描述】:
我收到一个错误:
将 C 指针类型“ABRecordRef”(又名“const void *”)隐式转换为 Objective-C 指针类型“id”需要桥接转换
从此代码中,尝试将ABRecordRef 添加到NSMutableArray
ABRecordRef person = (__bridge ABRecordRef)[contactArr objectAtIndex:i];
[addressBookArray addObject:person];
addressBookArray 定义为
NSMutableArray *addressBookArray;
【问题讨论】:
标签:
objective-c
cocoa-touch
nsmutablearray
abrecord
【解决方案1】:
正如错误消息所说,您需要重新投射对象才能将其放回NSMutableArray:
ABRecordRef person = (__bridge ABRecordRef)[contactArr objectAtIndex:i];
[addressBookArray addObject:(__bridge ABRecord *)person];
ABRecord是对应ABRecordRef的ObjC类;它们是免费桥接的,因此可以为此目的互换。
注意:ABRecord 仅在 OS X 上可用。如果您使用的是 iOS,并且首先设法将这些 ABRecordRefs 放入 NSArray,则必须使用 id重铸
[addressBookArray addObject:(__bridge id)person];