我正在用 Swift 编写一个 iOS 应用程序,该应用程序从多个应用程序屏幕收集用户输入,在最后一个屏幕中,它应该通过 API 将收集到的信息发布到服务器。
现在我的问题是,在应用程序上管理收集的数据的最佳方式是什么?我应该使用 plist 来保存我的表单数据吗?它还有一张图片,我想从最终屏幕上传到我的服务器。我该怎么办?
PS:我也读过http://developer.apple.com/CoreData ,但我不确定这是否是正确的前进方式。
非常感谢任何建议。
最佳答案
更新:为了节省您的时间 - 这是 Swift 1.2 解决方案。我没有在 Swift 2 上测试它(可能必须更新 secureValue 流程)
看起来你在谈论用户的详细信息/个人资料(如果我错了请纠正我),对于这种数据量 - 使用 NSUserDefault 是完全可以的。
对于用户首选项(如果是这样的话!!)我会使用类似 Preference Manager 的东西:
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
用于其余值
关于ios - 在 Swift iOS 应用程序中存储数据供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32307648/