2013-03-06 4 views
9
)

Ich habe einige Informationen im Schlüsselbund gespeichert, und es gibt einen Fall, den ich alle Elemente entfernen muss, anstatt [keychain removeObjectForKey:theKey] für alle Schlüssel zu tun, kann Ich mache:Korrekter Weg, um alle Schlüsselbunddaten für eine iOS App zu entfernen (

NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass, 
         [self serviceName], kSecAttrService, nil]; 

return !SecItemDelete((CFDictionaryRef)spec); 

statt?

Ich versuchte es und es funktionierte, nur nicht sicher, ob ich das Richtige mache?

Antwort

5

in meiner app ich diese Linie mit meinem Schlüsselbund löschen:

[[[KeychainItemWrapper alloc] initWithIdentifier:@"my_key" accessGroup:nil] resetKeychainItem] 
+0

Was die Kennung? Ist es der kSecAttrService? – hzxu

+0

Sie können den gewünschten Bezeichner auswählen, falls in Ihrer Anwendung mehrere KeychainItem-Objekte behandelt werden sollen. – Kirualex

0

Ich glaube, was Sie tun, richtig ist, in der Tat, können Sie den kSecAttrService Parameter in der Abfrage vermeiden, wenn Sie wollen. Auf der anderen Seite gibt SecItemDelete einen OSStatus-Wert zurück, den Sie nach detaillierteren Informationen über die Transaktion durchsuchen können.

NSDictionary *spec = [NSDictionary dictionaryWithObjectsAndKeys:(id)kSecClassGenericPassword, kSecClass, nil]; 

    OSStatus status = SecItemDelete((CFDictionaryRef)spec); 
    if (status == errSecSuccess) 
     return YES; 

    return NO; 

Here are the codes und Bedeutungen für die möglichen Statuswerte