2015-10-19 167 views
1

調用SecItemAdd時,我沒有找到有關此類錯誤代碼的信息,可能是什麼原因造成的?iOS中的鑰匙串訪問:「鑰匙串無法將代碼存儲在代碼中:-50」

在此先感謝

編輯:這是我的錯誤的功能:

+ (BOOL)storeWithKey:(NSString *)keyStr withValueStr:(NSString *)valueStr 
{ 
    if ((keyStr != nil) && (![keyStr isEqualToString:@""]) && 
     (valueStr != nil) && (![valueStr isEqualToString:@""])) { 

     NSData *valueData = [valueStr dataUsingEncoding:NSUTF8StringEncoding]; 
     NSString *service = [[NSBundle mainBundle] bundleIdentifier]; 

     NSDictionary *secItem = @{(__bridge id)kSecClass : (__bridge id)kSecClassInternetPassword, 
           (__bridge id)kSecAttrService : service, 
           (__bridge id)kSecAttrAccount : keyStr, 
           (__bridge id)kSecValueData : valueData}; 

     CFTypeRef result = NULL; 

     // Store value and get the result code 
     OSStatus status = SecItemAdd((__bridge CFDictionaryRef)secItem, &result); 

     NSLog(@"'writeToKeychain'. %@", [self getErrorMessage:status]); 

     return [self checkIfInKeychain:status]; 
    } 
    else { 
     return NO; 
    } 
} 
+0

你在哪裏得到這個錯誤? –

+0

-50 = paramErr。呼叫中的某些參數是錯誤的,由於參數不正確,呼叫不可能成功。 – gnasher729

回答

2

-50表示One or more parameters passed to a function were not valid。你是錯誤的參數組合。

如果您使用kSecAttrServicekSecAttrAccount,kSecClass應該是kSecClassGenericPassword

NSDictionary *secItem = @{(__bridge id)kSecClass : (__bridge id)kSecClassGenericPassword, 
          (__bridge id)kSecAttrService : service, 
          (__bridge id)kSecAttrAccount : keyStr, 
          (__bridge id)kSecValueData : valueData}; 

如果使用kSecClassInternetPasswordkSecClass,你應該使用kSecAttrServerkSecAttrPort(如果需要),而不是kSecAttrService

NSDictionary *secItem = @{(__bridge id)kSecClass : (__bridge id)kSecClassInternetPassword, 
          (__bridge id)kSecAttrServer : @"example.com", 
          (__bridge id)kSecAttrPort : @(80), // Optional 
          (__bridge id)kSecAttrAccount : keyStr, 
          (__bridge id)kSecValueData : valueData}; 
+0

這解決了我在Swift 3中的一個類似問題。在沒有kSecClass的ObjC中工作,但在Swift 3中,它給出了-50。添加kSecClass與kSecClassGenericPassword,它的工作原理。謝謝@ kishikawa-katsumi – Brett