2013-03-06 6 views
9

Ho memorizzato alcune informazioni nel portachiavi, e c'è un caso che ho bisogno di rimuovere tutti gli elementi, invece di fare [keychain removeObjectForKey:theKey] per tutte le chiavi, può Sì:Modo corretto per rimuovere (spurgare) tutti i dati portachiavi per un'app iOS

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

return !SecItemDelete((CFDictionaryRef)spec); 

?

Ho provato e ha funzionato, non so se sto facendo la cosa giusta?

risposta

5

nella mia app sto usando questa linea per cancellare il mio portachiavi:

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

Che cosa è che identificatore? È il kSecAttrService? – hzxu

+0

È possibile scegliere qualsiasi identificatore che si desidera, nel caso in cui sia necessario avere più KeychainItem gestito nell'applicazione. – Kirualex

0

Credo che quello che stai facendo è corretto, infatti, si può evitare il parametro kSecAttrService nella query, se si desidera. D'altra parte, SecItemDelete restituisce un valore OSStatus che è possibile controllare per informazioni più dettagliate sulla transazione.

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

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

    return NO; 

Here are the codes e significati per lo stato di possibili valori