更新应用程序时替换预加载的数据 - iOS Swift
Replace Preloaded Data when App is Updated - iOS Swift
我有一个应用程序在第一次启动时将 CSV 文件预加载到核心数据中,如下所示:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let isPreloaded = defaults.bool(forKey: "isPreloaded")
if !isPreloaded {
preloadData()
defaults.set(true, forKey: "isPreloaded")
}
}
但是,我想在更新应用程序时预加载新的更新 CSV 文件。我想我可以在我的默认设置中创建一个名为 "isPreloaded2" 的新密钥,但是 CSV 文件会随着每次更新而改变,我想知道是否有更好的方法。
也许您可以在 userDefaults 中创建一个键 lastUpdatedVersion
以检查哪个版本已经更新。
然后你可以检查类似:
let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"]
if !NSUserDefaults.standardUserDefaults.objectForKey(key: "lastVersionUpdated") || NSUserDefaults.standardUserDefaults.objectForKey(key: "lastVersionUpdated") != currentVersion
{
//Update your CSV here
//...
NSUserDefaults.standardUserDefaults.setObjectForKey(key: "lastVersionUpdated", object: currentVersion)
}
但这是否是一个优雅的解决方案仍由您决定。
感谢 JoRa 的解决方案。对于任何感兴趣的人,以下是我在 Swift:
中的实现方式
Swift 3.0
let defaults = UserDefaults.standard
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
let currentVersion = defaults.value(forKey: "currentVersion") as? String
if version != currentVersion { //currentVersion will either be nil or last version number when app is launched after update.
preloadData()
defaults.set(version, forKey: "currentVersion") //update currentVersion in defaults so version will match currentVersion next time.
}
}
并且不要忘记在预加载新数据之前删除旧数据(我的 preloadData() 函数包含一个 removeData() 函数)。
我有一个应用程序在第一次启动时将 CSV 文件预加载到核心数据中,如下所示:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let isPreloaded = defaults.bool(forKey: "isPreloaded")
if !isPreloaded {
preloadData()
defaults.set(true, forKey: "isPreloaded")
}
}
但是,我想在更新应用程序时预加载新的更新 CSV 文件。我想我可以在我的默认设置中创建一个名为 "isPreloaded2" 的新密钥,但是 CSV 文件会随着每次更新而改变,我想知道是否有更好的方法。
也许您可以在 userDefaults 中创建一个键 lastUpdatedVersion
以检查哪个版本已经更新。
然后你可以检查类似:
let currentVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"]
if !NSUserDefaults.standardUserDefaults.objectForKey(key: "lastVersionUpdated") || NSUserDefaults.standardUserDefaults.objectForKey(key: "lastVersionUpdated") != currentVersion
{
//Update your CSV here
//...
NSUserDefaults.standardUserDefaults.setObjectForKey(key: "lastVersionUpdated", object: currentVersion)
}
但这是否是一个优雅的解决方案仍由您决定。
感谢 JoRa 的解决方案。对于任何感兴趣的人,以下是我在 Swift:
中的实现方式Swift 3.0
let defaults = UserDefaults.standard
if let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String {
let currentVersion = defaults.value(forKey: "currentVersion") as? String
if version != currentVersion { //currentVersion will either be nil or last version number when app is launched after update.
preloadData()
defaults.set(version, forKey: "currentVersion") //update currentVersion in defaults so version will match currentVersion next time.
}
}
并且不要忘记在预加载新数据之前删除旧数据(我的 preloadData() 函数包含一个 removeData() 函数)。