我一直在研究这个问题一段时间,似乎无法找到解决方案。在我的应用程序中,我根据创建日期唯一标识联系人ABAddressBook
,因为不能同时创建两个联系人。在我的应用程序中,创建日期存储在一个名为 的字符串中uid
,如下所示。我正在检查两个联系人是否相同,我通过执行以下条件语句来做到这一点:
NSString *uid = @"some string";
if([(__bridge_transfer NSString *)ABRecordCopyValue(currentPersonRef, kABPersonCreationDateProperty) isEqualToString:uid]) {
//Do some code
}
但是,当我运行此代码时,出现以下错误:
[__NSDate isEqualToString:]:无法识别的选择器发送到实例 0x8c7c770
我很确定问题在于ABRecordCopyValue()
返回的 NSDate 对象没有被转换为NSString
,(__bridge_transfer NSString *)
所以当我将它与uid
using进行比较时isEqualToString
,它会崩溃。问题是,我认为通过将其转换为 NSString 对象isEqualToString:
会起作用。我的问题是:
为什么 (__bridge_transfer NSString *) 不强制转换 NSDate 对象?
编辑:
提供的答案很有用,但它们并没有完全解决我的问题(实际上他们确实如此,但我有一个后续问题)。在我的代码的另一部分,我运行这个:
NSString *uid = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonCreationDateProperty);
如果我 NSLoguid
我得到这个:
2012-10-28 21:55:29 +0000
那么如果不起作用,我将如何uid
在上述条件语句中进行比较?isEqualToString: