2012-04-20 10 views
7

私はキーチェーンからユーザー名/パスワードを取得したいと思います。iOS:ARCでCFTypeRefを許可していません

Simple iPhone Keychain Access

しかし、この部分は、ARCで許可されていません:このため、私は、このガイドに従っ

NSData *result = nil;  
OSStatus status = SecItemCopyMatching(
        (CFDictionaryRef)searchDictionary,            
        (CFTypeRef *)&result); 

私は何ができますか?

答えて

19

ARCはObjective-Cタイプのみを管理します。 Core Foundationタイプにキャストする場合は、__bridge,__bridge_retainedまたは__bridge_transferを使用して、変数の所有者にARCに通知する必要があります。

ここでは、ARCのフリーダイヤルブリッジに関するApple's official documentation、または、this blog post(フリーダイヤルブロッキングまでスクロール)を参照してください。例えば

NSData *inData = nil; 
CFTypeRef inTypeRef = (__bridge CFTypeRef)inData; 
OSStatus status = SecItemCopyMatching(
        (__bridge CFDictionaryRef)searchDictionary, 
        &inTypeRef); 
+0

はあなたにサイモンに感謝。 Xcode noticed: 'NSData * __ strong *'を 'CFTypeRef *'(別名const void ** ')にキャストしている互換性のない型が見つかりました。 __bridgeキャスト付き – filou

+4

キャストをあなたの参照外から分けてください。これのようなもの: 'CFTypeRef r =(__bridge CFTypeRef)result; OSStatus status = SecItemCopyMatching(__ bridge CFDictionaryRef)searchDictionary、&r); –

+0

何らかの理由でleelangの解決策がありませんでした。xcode 7.3 –

1
CFTypeRef inData = NULL; 
OSStatus status = SecItemCopyMatching(
        (__bridge CFDictionaryRef)searchDictionary, 
        & inData); 
NSData *data = (__bridge NSData *)inData; 
+0

"これを試してください"は何が問題なのか説明していないのであまり役に立ちませんそれは別のケースでは。 –

関連する問題