Iphone 使用通讯簿委托方法时在xcode上强制转换错误

Iphone 使用通讯簿委托方法时在xcode上强制转换错误,iphone,objective-c,ios,xcode,automatic-ref-counting,Iphone,Objective C,Ios,Xcode,Automatic Ref Counting,我从appledev库中逐行复制了这个方法,并获得了两个NSString转换的转换错误。如何解决这些问题?(我正在使用ARC) 谢谢你的帮助 试试这种类型的铸造: CFStringRef name = (CFStringRef)ABRecordCopyValue(person, kABPersonFirstNameProperty); self.lastName.text = (__bridge NSString *) name; 代码> CFSTRIGRF 和 NSCORST*(文档为您链

我从appledev库中逐行复制了这个方法,并获得了两个NSString转换的转换错误。如何解决这些问题?(我正在使用ARC)


谢谢你的帮助

试试这种类型的铸造:

CFStringRef name = (CFStringRef)ABRecordCopyValue(person, kABPersonFirstNameProperty);

self.lastName.text = (__bridge NSString *) name;

代码> CFSTRIGRF 和 NSCORST*(文档为您链接),但编译器正在寻找从您的代码> abcordCopyValue调用返回的核心基础类型。所以我的台词使用了核心基础类型。然后,当您将其分配给标签时,您可以将名称强制转换为

NSString*
类型


以下是有关的详细信息。

听起来您正在使用ARC

ARC禁止在指向Objective-C对象的指针和其他类型的指针(包括指向CoreFoundation对象的指针)之间进行标准转换

以下代码在手动内存管理下是正确的,不使用ARC编译:

NSString* name = (NSString *)ABRecordCopyValue(person,
                             kABPersonFirstNameProperty);
要使用ARC进行编译,需要对强制转换进行注释。看


\uuuuu bridge\u transfer
注释将值移动到ARC中并转移所有权,即它告诉ARC此对象已被保留,ARC不需要再次保留它。

您得到的确切错误是什么?在第二行上得到相同的错误(Xcode建议我使用bridge,但这也不起作用)(当我记录它时给我空值)是什么给了你
NULL
self.lastName
self.lastName.text
name
或?如果你在
ABRecordCopyValue
行上设置了一个断点,是否有任何东西被分配给
name
或保持
NULL
?如果是这样,我怀疑你传递给
ABRecor>的参数dCopyValue
是错误的。只需选中“name”即可获得正确的值。如果我侦听Xcode并在强制转换中添加_bridge:self.lastName.text=(_bridgensstring*),我将获得self.lastName.text Nullname;否则我会得到一个错误。@albertamg说得对……如果你在问题中提到了ARC,那就太好了。我正在修改我的答案,让它更有意义。桥转移(而不仅仅是桥转移)在那里是重要的。否则引用计数将被关闭1。实际上,假警报-看起来self.lastName.text仍然为空…只是没有编译错误。有什么想法吗?@TommyG确保
self.lastName
不是零
NSString* name = (NSString *)ABRecordCopyValue(person,
                             kABPersonFirstNameProperty);
NSString* name = (__bridge_transfer NSString *)ABRecordCopyValue(person,
                                               kABPersonFirstNameProperty);