2013-11-27 205 views
1

我想從我的SSKeychain中刪除一個帳戶。 我只得到刪除密碼的方法,但帳戶仍在鑰匙串中。SSKeychain刪除帳戶

有沒有辦法刪除帳戶或清除SSKeychain?

回答

3

我想用它來刪除帳戶, :
1.實例SSKeychainQuery對象。
2.設置我想要刪除的服務和賬戶。
3.調用該方法deleteItem:

//1 
SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 
//2 
query.service = @"MyService"; 
query.account = @"account2"; 
//3 
[query deleteItem:nil]; 

然後,如果你打電話

NSLog(@"%@",[SSKeychain accountsForService:@"MyService"]); 

這將打印名爲「爲MyService」或空服務的所有賬戶,如果有沒有「爲MyService」

0

從代碼的外觀看來,似乎根本無法更改帳戶(除了向服務添加密碼)。

從Github的討論來看,似乎沒有人對這個特性感興趣。

我的建議:去here併發佈一個新的問題。我認爲這應該是可行的,至少他們可以肯定地告訴你,如果已經有一種方式與當前版本的SSKeyChain。

編輯

關於第二個想法,就不會刪除了某個帳戶,所有的密碼進行賬戶「子虛烏有」?

0

SSKeychainQuery我找到了方法來刪除帳戶

/** 
Dete keychain items that match the given account, service, and access group. 

@param error Populated should an error occur. 

@return `YES` if saving was successful, `NO` otherwise. 
*/ 
- (BOOL)deleteItem:(NSError **)error; 

但這是方法,它​​用途。所以實際上只deleteItem刪除密碼,而不是整個項目

+ (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account error:(NSError *__autoreleasing *)error { 
    SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 
    query.service = serviceName; 
    query.account = account; 
    return [query deleteItem:error]; 
} 
1

如何

+ (BOOL)deletePasswordForService:(NSString *)service account:(NSString *)account; 

或者刪除所有帳戶:

NSArray *accounts = [SSKeychain allAccounts]; 
for (int i = 0; i < accounts.count ; i++) { 
    [SSKeychain deletePasswordForService:service account:[accounts objectAtIndex:i]]; 
} 
+1

正如我寫的,我想刪除帳戶不僅僅是相應的密碼。 –

2

清除鑰匙扣最簡單的方法是這樣的:

SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 

NSArray *accounts = [query fetchAll:nil]; 

for (id account in accounts) { 

    SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 

    query.service = @"<INSERT SERVICE NAME>"; 
    query.account = [account valueForKey:@"acct"]; 

    [query deleteItem:nil]; 

}