Ios 保存特定于应用程序的数据,即使在删除应用程序后也保留数据

Ios 保存特定于应用程序的数据,即使在删除应用程序后也保留数据,ios,objective-c,swift,Ios,Objective C,Swift,有没有一种方法可以在应用程序卸载后保留一些数据,并且在应用程序再次安装后可以检索 我发现了NSUserDefault,但我不确定。请告知 let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject("Coding Explorer", forKey: "userNameKey") 卸载应用程序时,NSUserDefaults将被清除。我认为最好的方法是使用它,它还可以确保您的数据是加密的,其他人无法访问。您需要

有没有一种方法可以在应用程序卸载后保留一些数据,并且在应用程序再次安装后可以检索

我发现了NSUserDefault,但我不确定。请告知

let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("Coding Explorer", forKey: "userNameKey")

卸载应用程序时,
NSUserDefaults
将被清除。我认为最好的方法是使用它,它还可以确保您的数据是加密的,其他人无法访问。

您需要使用密钥链,以获取有关应用程序的合理信息

下面是一个如何实现这一点的示例


当用户从设备卸载应用程序时,UserDefaults将被删除,因此替代方法是Keychain。

这很可能是使用iOS上的Keychain完成的

但在我看来,卸载后留下数据不利于应用程序的沙箱化。有很多方法可以做到这一点,比如你可以添加图片/照片/联系人/…,但不太可能是“苹果批准的”,而且很可能更容易破解

所以我也建议您使用web服务。一种简单的方法是在找不到应用程序数据(安装和重新安装)时使用服务进行验证(例如,使用设备的MAC地址,因为设备唯一标识符正在消失)。如果它是已知设备(无令牌)或非已知设备(获取令牌)。

我个人不会为此使用keychain,对于这样简单的东西来说,它实在太重了

您可能会找到一些运气,使用它可以将少量数据放在“正常默认值”区域之外。但这似乎也超出了你的需要


另一种选择是先保存数据,然后将其保存到iCloud。

使用此方法保存数据:

   func saveIMEI(key: String, data: String) -> OSStatus {
    let query = [
        kSecClass as String       : kSecClassGenericPassword as String,
        kSecAttrAccount as String : key,
        kSecValueData as String   : data ] as [String : Any]

    SecItemDelete(query as CFDictionary)

    return SecItemAdd(query as CFDictionary, nil)
}
使用此选项加载数据:

     func loadIMEI(key: String) -> String? {
    let query = [
        kSecClass as String       : kSecClassGenericPassword,
        kSecAttrAccount as String : key,
        kSecReturnData as String  : kCFBooleanTrue,
        kSecMatchLimit as String  : kSecMatchLimitOne ] as [String : Any]

    var dataTypeRef: AnyObject? = nil

    let status: OSStatus = SecItemCopyMatching(query as CFDictionary, &dataTypeRef)

    if status == noErr {
        return dataTypeRef as! String?
    } else {
        return nil
    }
}

可以使用钥匙链。请添加信息:有多少数据,属于什么类型,以及如何在应用程序中使用?