gpt4 book ai didi

objective-c - 为什么这种类型转换不适用于自身?

转载 作者:行者123 更新时间:2023-11-28 18:39:30 27 4
gpt4 key购买 nike

我已经研究这个问题一段时间了,但似乎找不到解决方案。在我的应用程序中,我根据创建日期从 ABAddressBook 中唯一标识联系人,因为不能同时创建两个联系人。在我的应用程序中,创建日期存储在名为 uid 的字符串中,如下所示。我正在检查两个联系人是否相同,我通过执行以下条件语句来执行此操作:

NSString *uid = @"some string";

if([(__bridge_transfer NSString *)ABRecordCopyValue(currentPersonRef, kABPersonCreationDateProperty) isEqualToString:uid]) {

//Do some code
}

但是,当我运行这段代码时,出现以下错误:

[__NSDate isEqualToString:]: unrecognized selector sent to instance 0x8c7c770

我很确定问题是 ABRecordCopyValue() 返回的 NSDate 对象没有被 (__bridge_transfer NSString *) 转换为 NSString ,所以当我使用 isEqualToString 将它与 uid 进行比较时,它崩溃了。问题是,我认为通过将其转换为 NSString 对象,isEqualToString: 会起作用。我的问题是:

为什么 (__bridge_transfer NSString *) 没有转换 NSDate 对象?


编辑:

提供的答案很有用,但它们并没有完全解决我的问题(实际上它们确实可以,但我有一个后续问题)。在我的代码的另一部分,我运行这个:

NSString *uid = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonCreationDateProperty);

如果我使用 NSLog uid 我会得到这个:

2012-10-28 21:55:29 +0000

那么,如果 isEqualToString: 不起作用,我将如何比较上述条件语句中的 uid

最佳答案

强制转换永远不会改变对象的类或类型。它只是告诉编译器,你确定这个对象是另一种类型,而不是编译器可能假设的。

因此,如果您将日期对象转换为字符串,它仍然是一个日期对象。

在 OOP 中,你通常需要向上转型:一个方法要你传入一个对象,但实际上你传入的是一个子类的对象。如果您随后需要访问子类定义的属性或方法,您将告诉编译器,您通过强制转换获得了子类的对象。
iOS 中一个非常常见的例子是 tableview:cellForRowAtIndexPath: 带有子类单元格。

在 cocoa(-touch) 中,您还知道从 toll-free bridging 进行转换.请参阅此文档以获取有效的类型转换。


The answers provided have been useful, but they do not completely address my problem (well actually they do, but I have a follow-up question). In another part of my code, I run this:

NSString *uid = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonCreationDateProperty);

And if I NSLog uid I get this:

2012-10-28 21:55:29 +0000

你正在创建一个变量,你声明它是一个 NSString,但实际上你分配给它的对象是一个日期对象。

NSDate *uidDate = (__bridge_transfer NSDate *)ABRecordCopyValue(currentPerson, kABPersonCreationDateProperty);

NSString *uid = [NSString stringWithFormat:uidDate];

关于objective-c - 为什么这种类型转换不适用于自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com