KeychainItemWrapper в iOS6

Я использую KeyChainItemWeapper.m в своем проекте приложения, чтобы сохранить псевдоним и пароль. В iOS7 работает отлично, а в iOS 6.0, 6.1 вылетает. Ошибка:

*** Assertion failure in -[KeychainItemWrapper writeToKeychain], /Users/KeychainItemWrapper.m:328
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn't add the Keychain Item.'
*** First throw call stack:
(0x1ea2012 0x1c5ae7e 0x1ea1e78 0x1919665 0xe785a 0xe6bf0 0x1479b6 0x14848f 0x11bb0bc 0x1c6e705 0xdcb2c0 0xdcb258 0xe8c021 0xe8c57f 0xe8b6e8 0xdfacef 0xdfaf02 0xdd8d4a 0xdca698 0x2f77df9 0x2f77ad0 0x1e17bf5 0x1e17962 0x1e48bb6 0x1e47f44 0x1e47e1b 0x2f767e3 0x2f76668 0xdc7ffc 0x15270d 0x356d725 0x1)
libc++abi.dylib: terminate called throwing an exception

Этот код находится при сбое приложения:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"100PrimerosLogin" accessGroup:nil];
[keychain setObject:disp_pasa.token forKey:(__bridge id)(kSecValueData)];
[keychain setObject:nick forKey:(__bridge id)(kSecAttrAccount)];
[keychain setObject:(__bridge id)(kSecClassGenericPassword) forKey:(__bridge id)kSecClass];
[keychain setObject:(__bridge id)kSecAttrAccessibleAlwaysThisDeviceOnly forKey:(__bridge id)kSecAttrAccessible];

Псевдоним — это iphone mac, а пароль — буквенно-цифровой код.

Заранее благодарю.


person amurcia    schedule 02.09.2014    source источник
comment
Возможный дубликат stackoverflow.com/questions/19749160 /   -  person Andrey    schedule 02.09.2014


Ответы (1)


Когда вам нужно сохранить токен аутентификации в связке ключей, сохраните значение для ключа kSecAttrService: например:

[keychain setObject:@"YourAppNameDecription" forKey: (__bridge id)kSecAttrService];

Добавьте значение выше также в цепочку для ключей при сохранении токена и других полей.

Это решит вашу проблему сбоя.

person Satish Azad    schedule 02.09.2014
comment
Спасибо, это работает. Я попробовал, но не указал значение выше токена сохранения. - person amurcia; 02.09.2014