2011-09-29 152 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