我一直在處理這個問題一段時間,似乎無法找到解決方案。在我的應用程序中,我根據其創建日期唯一標識了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對象沒有被鑄造到NSString
(__bridge_transfer 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
因此,如何將我在上面的條件語句比較uid
如果isEqualToString:
不工作?
你在問kABPersonCreationDateProperty,它總是會返回一個CFDateRef,無論你如何聲明它。如果你需要它作爲NSString,你需要先轉換它,然後在其上運行'isEqualToString'。 – Rog