使用地址簿委托方法时在xcode上输出错误

Tom*_*myG 2 iphone xcode objective-c ios automatic-ref-counting

我从apple dev库中逐行复制了这个方法,并获得了两个NSString强制转换的转换错误.怎么解决这个问题?(我正在使用ARC)

- (BOOL)peoplePickerNavigationController:
        (ABPeoplePickerNavigationController *)peoplePicker
  shouldContinueAfterSelectingPerson:(ABRecordRef)person {

NSString* name = (NSString *)ABRecordCopyValue(person,
                                         kABPersonFirstNameProperty);
self.firstName.text = name;

name = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
self.lastName.text = name;

[self dismissModalViewControllerAnimated:YES];

return NO;
}
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

alb*_*amg 8

听起来你正在使用ARC.

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

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

NSString* name = (NSString *)ABRecordCopyValue(person,
                             kABPersonFirstNameProperty);
Run Code Online (Sandbox Code Playgroud)

要使用ARC编译它,您需要注释强制转换.见桥接演员表.

NSString* name = (__bridge_transfer NSString *)ABRecordCopyValue(person,
                                               kABPersonFirstNameProperty);
Run Code Online (Sandbox Code Playgroud)

__bridge_transfer注释移动值转换成ARC和所有权转移,即,它告诉ARC这个对象已经保留,而ARC不需要再保留它.