私はしばらくこの問題に取り組んできましたが、解決策が見つからないようです。私のアプリでは、ABAddressBook
2 つの連絡先を同時に作成することはできないため、作成日から連絡先を一意に識別します。私のアプリでは、以下に示すように、作成日は という文字列に保存されuid
ます。2 つの連絡先が同じであるかどうかを確認しています。これは、次の条件ステートメントを実行することによって行います。
NSString *uid = @"some string";
if([(__bridge_transfer NSString *)ABRecordCopyValue(currentPersonRef, kABPersonCreationDateProperty) isEqualToString:uid]) {
//Do some code
}
ただし、このコードを実行すると、次のエラーが発生します。
[__NSDate isEqualToString:]: 認識されないセレクターがインスタンス 0x8c7c770 に送信されました
問題は、によってキャストされていない NSDate オブジェクトを返すことだと確信しているためABRecordCopyValue()
、それをusingと比較すると、クラッシュします。問題は、それを NSString オブジェクトにキャストすることでうまくいくと思ったということです。私の質問は:NSString
(__bridge_transfer NSString *)
uid
isEqualToString
isEqualToString:
(__bridge_transfer NSString *) が NSDate オブジェクトをキャストしないのはなぜですか?
編集:
提供された回答は役に立ちましたが、私の問題を完全に解決するものではありません (実際にはそうですが、フォローアップの質問があります)。コードの別の部分で、これを実行します。
NSString *uid = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonCreationDateProperty);
NSLoguid
を実行すると、次のようになります。
2012-10-28 21:55:29 +0000
うまくいかないuid
場合、上記の条件ステートメントでどのように比較しますか?isEqualToString: