2017-03-07 140 views
0

我正在使用SSkeychain類將數據保存到鑰匙串中,但是當我嘗試迭代帳戶時,應用程序在列表中的第三項中崩潰,其中acct = < 5f70666f>;objective C以編程方式從鑰匙串中刪除帳戶

我想刪除該特定帳戶,但我無法將其刪除。我試圖刪除相關聯的所有應用程序中的鑰匙串數據,但還是我面臨的問題

SSKeychainQuery *query = [[SSKeychainQuery alloc] init]; 
BOOL isMatchPasscode=FALSE; 
NSArray *accounts = [query fetchAll:nil]; 
for (id account in accounts){ 
    if([[account 
    valueForKey:@"acct"]isEqualToString:constKeychainAccountTitle ]) 
    { 
    } 
} 

LOG FOR ACCOUNTS 
acct = "fc_uuidForDevice"; 
agrp = "99P5TJ23MZ.com.view.Street.dev"; 
cdat = "2017-03-07 08:53:17 +0000"; 
mdat = "2017-03-07 09:45:32 +0000"; 
musr = <>; 
pdmn = ck; 
svce = "com.view.Str.dev"; 
sync = 0; 
tomb = 0; 
}, 
{ 
acct = "fc_uuidsOfUserDevices"; 
agrp = "99P5TJ23MZ.view.Street.dev"; 
cdat = "2017-03-07 08:53:17 +0000"; 
mdat = "2017-03-07 09:45:32 +0000"; 
musr = <>; 
pdmn = ck; 
svce = "com.view.Street.dev"; 
sync = 1; 
tomb = 0; 
}, 
{ 
acct = <5f70666f>; 
agrp = "99P5TJ23MZ.view.Street.dev"; 
cdat = "2017-03-07 08:53:20 +0000"; 
gena = <5f70666f>; 
mdat = "2017-03-07 08:53:20 +0000"; 
musr = <>; 
pdmn = dku; 
svce = "com.view.Street.dev"; 
sync = 0; 
tomb = 0; 
} 
) 
+0

什麼是崩潰的消息和堆棧跟蹤? – Paulw11

+0

- [__ NSCFData isEqualToString:]:無法識別的選擇器發送到實例0x1740abcb0 – Vinaykrishnan

+0

因此,您的代碼假定它從keychain獲取一個字符串,但在這種情況下,它檢索NSData,然後嘗試對其執行字符串比較。你應該改變你的代碼使用'isKindOfClass'來檢查你有一個字符串,然後再執行字符串操作 – Paulw11

回答

2

- [__ NSCFData isEqualToString:]:無法識別的選擇發送到實例0x1740abcb0

我試圖比較的NSData就字符串而言,這就是崩潰的原因。

嘗試這樣:

id acctObject = [account valueForKey:@"acct"]; 
NSString *acctString = ([acctObject isKindOfClass:[NSString class]]) ? (NSString *)acctObject : ([acctObject isKindOfClass:[NSData class]]) ? [[NSString alloc] initWithData:acctObject encoding:NSUTF8StringEncoding] : nil; 

if (acctString && [acctString isEqualToString:constKeychainAccountTitle]) { 
    // stuff 
} 
+0

是的,我已經在我的最新版本中實現了這個代碼,它不再崩潰。問題在於爲了安全地將數據保存到設備中,我在開發版本中使用了鑰匙串,但是我已經上傳到應用商店的構建正在崩潰。它不會在沒有用於測試開發版本的設備上崩潰,它只會在那些已經/正在開發構建測試的設備上崩潰 – Vinaykrishnan

相關問題