2013-03-06 11 views
9

Przechowuję niektóre informacje w pęku kluczy, a jest przypadek, że muszę usunąć wszystkie elementy, zamiast robić [keychain removeObjectForKey:theKey] dla wszystkich kluczy, można Mam:Prawidłowy sposób na usunięcie (wyczyszczenie) wszystkich danych pęku kluczy dla aplikacji na iOS.

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

return !SecItemDelete((CFDictionaryRef)spec); 

zamiast tego?

próbowałem i to działa, po prostu nie wiem, czy robię właściwą rzecz?

Odpowiedz

5

w mojej aplikacji używam tej linii, aby usunąć mój pęk kluczy:

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

Co to jest identyfikator? Czy to jest kSecAttrService? – hzxu

+0

Możesz wybrać dowolny identyfikator, na wypadek gdyby w aplikacji potrzebna była obsługa wielu kluczy KeychainItem. – Kirualex

0

wierzę, co robisz, jest prawidłowe, w rzeczywistości, można uniknąć parametr kSecAttrService w zapytaniu, jeśli chcesz. Z drugiej strony SecItemDelete zwraca wartość OSStatus, którą można sprawdzić w celu uzyskania bardziej szczegółowych informacji o transakcji.

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

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

    return NO; 

Here are the codes i znaczenie dla ewentualnego statusu wartości

Powiązane problemy