2013-04-23 3 views
2

Я сохраняю и загружаю сериализованный nsdictionary в keychain, как в этом сообщении (Store NSDictionary in keychain), но мне нужно иметь возможность обновлять/редактировать содержимое словаря, поэтому я хотел бы удалить его и повторно добавить.Как удалить nsdictionary из keychain для замены

Я просто не знаю, как это сделать. У меня есть следующий код, взятый из вышеуказанного сообщения:

KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"arbitraryId" accessGroup:nil] 
    NSString *error; 
    //The following NSData object may be stored in the Keychain 
    NSData *dictionaryRep = [NSPropertyListSerialization dataFromPropertyList:dictionary format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; 
    [keychain setObject:dictionaryRep forKey:kSecAttrService]; 

    //When the NSData object object is retrieved from the Keychain, you convert it back to NSDictionary type 
    dictionaryRep = [keychain objectForKey:kSecAttrServce]; 
    NSDictionary *dictionary = [NSPropertyListSerialization propertyListFromData:dictionaryRep mutabilityOption:NSPropertyListImmutable format:nil errorDescription:&error]; 

    SecItemDelete((CFDictionaryRef)dictionaryRep); // doesnt work 

значения arent удалены из брелка.

благодаря

ответ

1

Это странное место для хранения данных. Вы помещаете его в kSecAttrService, который не зашифрован. Я думаю, вы хотите поставить это в kSecValueData (это единственный фрагмент зашифрованного ключа).

Сказали, что нет необходимости удалять предмет. Вы можете просто использовать [keychain setObject:forKey:], чтобы обновлять значение, когда захотите. KeychainItemWrapper автоматически определяет, существует ли элемент, и обновляет его, если это произойдет.

Если вы хотите удалить этот товар, используя KeychainItemWrapper, используйте -resetKeychainItem. Это вызывает SecItemDelete() с правильным значением. Вы не можете в целом комбинировать и сопоставлять использование KeychainItemWrapper и необработанные звонки на SecItem* без хорошего понимания API Keychain и точно, как работает KeychainItemWrapper.

0

Хотя я никогда не работал на доступ к свойствам брелки. но, посмотрев на метод SecItemDelete в документе Apple, ожидаемым параметром является словарь, в коде, который вы передаете dictionaryRep, который является NSData.

https://developer.apple.com/library/mac/#documentation/security/Reference/keychainservices/Reference/reference.html#//apple_ref/doc/c_ref/SecItemDelete

Нашли вопрос здесь, надеюсь, что это может помочь.

I want to delete all items in my self created KeyChain on Mac OS X

Смежные вопросы