2011-09-29 156 views
4

我有一個在Mac 10.6系統上使用Xcode 3.2.5構建的程序,程序需要添加和刪除系統鑰匙串中的項目。它在Mac OS X 10.6上運行良好,但在10.7上運行,對SecKeychainItemDelete的調用返回錯誤代碼-67701,該錯誤代碼在10.6 SDK中未定義。經過一些Google搜索後,我發現在10.7 SDK中新增了-67701(errSecInvalidRecord)。有誰知道如何解決這一問題?SecKeychainItemDelete在Mac OS X上返回-67701(errSecInvalidRecord)10.7

回答

4

我遇到了同樣的問題。發生這種情況的原因是每次調用SecKeychainFindInternetPasswordSecKeychainFindGenericPassword方法時,鑰匙串API都緩存SecKeychainItemRef對象。因此,無論何時調用這兩種方法中的任何一種,都一定要使用方法SecKeychainItemFreeAttributesAndData來清除api緩存。還使用CFRelease釋放SecKeychainItemRef對象。

+0

非常有幫助。對我來說,在內存中保留多個SecKeychainItemRef(即在我的KeychainItem包裝類成員變量中)指向同一個Keychain項目似乎觸發了這個問題。檢索數據後,我立即結束了CFRelease'ing。對我來說,似乎仍然有些尷尬。 – Daniel