2017-03-07 63 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