繁体   English   中英

将数据存储在Swift iOS应用中以供以后使用

[英]Storing data in Swift iOS app for later use

我在Swift中编写了一个iOS应用,该应用从多个应用屏幕收集用户输入,在最后一个屏幕中,该应用应该通过API将收集到的信息发布到服务器。

现在我的问题是,管理应用程序上收集的数据的最佳方法是什么? 我应该使用plist保存表单数据吗? 它也有一张图像,我想从最终屏幕上载到我的服务器。 我应该怎么做?

PS:我还阅读了有关http://developer.apple.com/CoreData的信息 ,但是我不确定这是否是正确的方法。

任何建议,不胜感激。

更新:节省您的时间-这是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用于其余的值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM