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

Coc*_*Dev 0 cocoa-touch objective-c nsmutablearray abrecord

我收到一个错误:

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

从这段代码,尝试添加ABRecordRef一个NSMutableArray

ABRecordRef person = (__bridge ABRecordRef)[contactArr objectAtIndex:i];
[addressBookArray addObject:person];
Run Code Online (Sandbox Code Playgroud)

addressBookArray 被定义为

NSMutableArray *addressBookArray;
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 5

正如错误消息所示,您需要重新构建对象,以便将其重新放入NSMutableArray:

ABRecordRef person = (__bridge ABRecordRef)[contactArr objectAtIndex:i];
[addressBookArray addObject:(__bridge ABRecord *)person];
Run Code Online (Sandbox Code Playgroud)

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


注意: ABRecord仅在OS X上可用.如果您在iOS上并且设法将这些ABRecordRefs设置为NSArray首先,您将不得不id用于重新投射

[addressBookArray addObject:(__bridge id)person];
Run Code Online (Sandbox Code Playgroud)