2012-04-20 86 views
7

我想獲得的用戶名/密碼,我的鑰匙串中。爲了這個,我遵循這個指南:的iOS:CFTypeRef不允許與ARC

Simple iPhone Keychain Access

但是,這部分是不允許用ARC:

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

我能做些什麼?

回答

19

ARC只管理Objective-C的類型。如果你投以核心基礎類型你必須告訴ARC誰擁有使用__bridge__bridge_retained__bridge_transfer變量。

這裏有免費橋接Apple's official documentation ARC下,或看到this blog post(向下滾動到免費電話橋接)爲一個偉大的概述。

例如:

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

謝謝西蒙。我已經使用'__bridge'但'(CFTypeRef *)結果);'它沒有工作.. Xcode中注意到:不兼容的類型鑄造 '的NSData * __ *強' 到 'CFTypeRef *'(又名 '常量無效**')用__bridge投 – filou 2012-04-20 20:37:04

+4

從您提領分離出你的施法。就像這樣:'CFTypeRef r =(__bridge CFTypeRef)結果; OSStatus狀態= SecItemCopyMatching((__橋CFDictionaryRef)searchDictionary,&r);' – 2012-04-20 21:09:46

+0

沒有工作。出於某種原因leelang解決方案做了。的Xcode 7.3 – 2016-04-22 08:06:10

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

「試試這個」,因爲它並不能說明什麼是錯的,如何解決是不是很有用它在另一種情況下。 – 2015-12-02 11:03:55