2017-03-10 1 views
0

J'ai une application qui précharge un fichier CSV dans Core Data lorsque l'application est lancée pour la première fois comme ceci:Remplacer les données préchargé lorsque App est mis à jour - iOS Swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    let isPreloaded = defaults.bool(forKey: "isPreloaded") 
    if !isPreloaded { 
     preloadData() 
     defaults.set(true, forKey: "isPreloaded") 
    } 
} 

Cependant, je veux précharger un nouveau fichier CSV mis à jour lorsque l'application est mise à jour. Je suppose que je pourrais créer une nouvelle clé appelée "isPreloaded2" dans mes valeurs par défaut, mais le fichier CSV va changer à chaque mise à jour et je me demandais s'il y avait une meilleure façon.

Répondre

0

Vous pourriez peut-être créer une clé lastUpdatedVersion dans userDefaults pour vérifier quelle version a déjà été mise à jour. Ensuite, vous pouvez vérifier quelque chose comme:

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) 
} 

Mais il est encore à vous de décider, que ce soit une solution ou non élégante.

1

Merci à JoRa pour sa solution. Pour toute personne intéressée, voici comment je l'ai mis en œuvre dans 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. 
    } 
} 

Et ne pas oublier d'enlever les anciennes données avant de précharger nouvelles données ainsi (ma fonction preloadData() inclut une fonction removeData()).