将ABRecordRef添加到NSMutableArray会导致需要桥接强制转换的错误

时间:2012-05-02 19:25:27

标签: objective-c cocoa-touch nsmutablearray abrecord

我收到错误:

  

C指针类型'ABRecordRef'(又名'const void *')到Objective-C指针类型'id'的隐式转换需要桥接转换

从此代码中尝试将ABRecordRef添加到NSMutableArray

ABRecordRef person = (__bridge ABRecordRef)[contactArr objectAtIndex:i];
[addressBookArray addObject:person];

addressBookArray定义为

NSMutableArray *addressBookArray;

1 个答案:

答案 0 :(得分:5)

正如错误消息所示,您需要重新投射对象才能将其重新放回NSMutableArray

ABRecordRef person = (__bridge ABRecordRef)[contactArr objectAtIndex:i];
[addressBookArray addObject:(__bridge ABRecord *)person];

ABRecord是与ABRecordRef对应的ObjC类;它们是免费的桥接器,所以它们可以互换用于此目的。


注意:ABRecord仅适用于OS X.如果您在iOS上并且首先设法将这些ABRecordRef设置为NSArray,那么您将会必须使用id进行重播

[addressBookArray addObject:(__bridge id)person];