UPDATE: чтобы сэкономить ваше время - это решение Swift 1.2. Я не тестировал его на Swift 2 (вероятно, должен быть обновлен поток secureValue)
Похоже, вы говорите о деталях пользователя/профиле пользователя (исправьте меня, если я ошибаюсь), для этого объема данных - с помощью NSUserDefault полностью нормально.
Для пользовательских предпочтений (если это дело !!) Я хотел бы использовать что-то вроде предпочтений менеджера:
import Foundation
import Security
class PreferencesManager {
class func saveValue(value: AnyObject?, key: String) {
NSUserDefaults.standardUserDefaults().setObject(value, forKey: key)
NSUserDefaults.standardUserDefaults().synchronize()
}
class func loadValueForKey(key: String) -> AnyObject? {
let r : AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey(key)
return r
}
class func saveSecureValue(value: String?, key: String) {
var dict = dictForKey(key)
if let v = value {
var data: NSData = v.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!
(SecItemDelete(dict as NSDictionary as CFDictionary))
dict[kSecValueData as NSString] = v.dataUsingEncoding(NSUTF8StringEncoding,
allowLossyConversion:false);
var status = SecItemAdd(dict as NSDictionary as CFDictionary, nil)
} else {
var status = SecItemDelete(dict as NSDictionary as CFDictionary)
}
}
class func loadSecureValueForKey(key: String) -> String? {
var dict = dictForKey(key)
dict[kSecReturnData as NSString] = kCFBooleanTrue
var dataRef: Unmanaged<AnyObject>?
var value: NSString? = nil
var status = SecItemCopyMatching(dict as NSDictionary as CFDictionary, &dataRef)
if 0 == status {
let opaque = dataRef?.toOpaque()
if let op = opaque {
value = NSString(data: Unmanaged<NSData>.fromOpaque(op).takeUnretainedValue(),
encoding: NSUTF8StringEncoding)
}
}
let val :String? = value as? String
return val
}
class private func dictForKey(key: String) -> NSMutableDictionary {
var dict = NSMutableDictionary()
dict[kSecClass as NSString] = kSecClassGenericPassword as NSString
dict[kSecAttrService as NSString] = key
return dict
}
}
Вы можете использовать PreferencesManager.saveSecureValue
защищенных данных (например, пароль и т.д.) и PreferencesManager.saveValue
для остальной части значения
Использование NSUserDfault. Вы можете преобразовывать изображение в данные, потому что NSUserDfault поддерживает только объекты сериализации, такие как string, nsnumbers, nsdata, nsdate и т. Д. –
Лучше всего просто сэкономить на диске, используйте каталог документов. Вы можете сохранить массив на диск напрямую, если убедитесь, что весь объект содержит 'NSCoding'. Ввод его в «NSUserDefaults» - это не очень хорошая идея, это касается небольших данных настроек. Не изображения. – rckoenes
@rckoenes Сохранить на диск, как в я создаю файл xml или json (для сохранения переменных) и png/jpeg для сохранения изображений? – Rao