Esiste un modo in cui è possibile eseguire una funzione una sola volta (quando l'app viene aggiornata o installata)? Non posso usare lo script di esecuzione come dovrei usare la funzione obiettivo c.Esegui solo la funzione alla prima esecuzione ios
risposta
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if (![userDefaults valueForKey:@"version"])
{
// CALL your Function;
// Adding version number to NSUserDefaults for first version:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
if ([[NSUserDefaults standardUserDefaults] floatForKey:@"version"] == [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue])
{
/// Same Version so dont run the function
}
else
{
// Call Your Function;
// Update version number to NSUserDefaults for other versions:
[userDefaults setFloat:[[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue] forKey:@"version"];
}
È possibile creare una chiave di valore BOOL (ad esempio isFirstLaunch = NO
) nel proprio NSUserDefaults
e impostarla su SÌ dopo aver eseguito la funzione.
Se si desidera eseguirlo ogni volta che l'utente avvia l'app, è necessario impostare la chiave sul valore predefinito prima che l'app esista (ad esempio reimpostarla nel metodo -applicationWillTerminate:
in AppDelegate).
Se si desidera eseguire del codice quando l'applicazione è o prima installato o dopo ogni aggiornamento allora si potrebbe leggere la versione corrente della vostra applicazione dal fascio
CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue];
e scrivere che i valori predefiniti utente dopo aver avere eseguito il codice
[[NSUserDefaults standardUserDefaults] setFloat:currentVersion
forKey:kLastVersionThatExecutedMyCodeKey];
Al prossimo avvio dell'app, si confronta il valore dei valori predefiniti dell'utente rispetto alla versione del pacchetto. Se la versione del pacchetto è stata modificata, l'app è stata aggiornata, il che significa che è necessario eseguire nuovamente il codice e scrivere la nuova versione sui valori predefiniti dell'utente.
dovrebbe essere (mancante le virgolette) -> [[NSUserDefaults standardUserDefaults] setFloat: currentVersion Forkey: @ "kLastVersionThatExecutedMyCodeKey"]; – mikemike396
@ Pyraego.com La prefissazione di un nome di variabile con un piccolo 'k' è una convenzione comune per indicare che è una costante. I framework Apple lo usano in molti posti. 'kLastVersionThatExecutedMyCodeKey' dovrebbe essere una variabile, non una stringa stessa. –
Interessante! Buono a sapersi. Dispiace per la confusione. – mikemike396
Questa è la conversione di Swift Bhupendra's answer:
let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary // Fetch info.plist as a Dictionary
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as NSString
let val: Float = temp.floatValue
var userDefaults = NSUserDefaults()
if userDefaults.valueForKey("version") == nil {
// Call function
// Adding version number to NSUserDefaults for first version
userDefaults.setFloat(val, forKey: "version")
}
if NSUserDefaults().floatForKey("version") == val {
// Same Version so dont run the function
} else {
// Call function
// Update version number to NSUserDefaults for other versions
userDefaults.setFloat(val, forKey: "version")
}
Questa è la versione Swift2.0 di risposta di Bhupendra, se qualcuno ne ha bisogno!
let infoDictionary: NSDictionary? = NSBundle.mainBundle().infoDictionary
//Fetch info.plist as a Dictionary
let temp: NSString = infoDictionary?.objectForKey("CFBundleVersion") as! NSString
let val: Float = temp.floatValue
let userDefaults = NSUserDefaults()
if userDefaults.valueForKey("version") == nil {
userDefaults.setFloat(val, forKey: "version")
}
if NSUserDefaults().floatForKey("version") == val {
//if it is the same version, don't run the code
}
else {
userDefaults.setFloat(val, forKey: "version")
}
}
- 1. Esegui la funzione prima dell'aggiornamento
- 2. Regex solo alla prima occorrenza?
- 3. Esegui codice prima che venga eseguita la funzione chiamata
- 4. Descrizione comandi overlay display alla prima esecuzione
- 5. Android: esecuzione del codice solo alla prima esecuzione e ad ogni successivo aggiornamento
- 6. Esegui codice solo dopo che la funzione asincrona termina l'esecuzione
- 7. eccezione windbg in sos.threads alla prima esecuzione
- 8. vagabondo chiede la password solo alla prima volta "vagabondo su"
- 9. Esegui setUp solo una volta
- 10. Esecuzione della funzione prima che la pagina arrivi a window.print()
- 11. Esegui la funzione, quindi segui il link
- 12. Esegui una funzione quando la colormap cambia
- 13. Esegui funzione dopo il ritardo
- 14. Durante l'esecuzione di un test di accesso Behat tramite PhantomJS, passa solo alla prima esecuzione
- 15. Esegui la funzione JavaScript a intervalli regolari
- 16. Esecuzione di una funzione poco prima di $ (document) .ready() trigger
- 17. Esegui solo l'editor MATLAB
- 18. Esegui la funzione dopo ogni ciclo di digest prima del rendering DOM
- 19. Android: il token Firebase è nullo alla prima esecuzione
- 20. passa la funzione in json ed esegui
- 21. Esegui la funzione specificata ogni X secondi
- 22. Esegui codice solo se il visitatore visualizza la pagina web
- 23. .Rimontare JavaScript sostituisce solo la prima partita
- 24. vba regex restituisce solo la prima corrispondenza
- 25. Funzione di esecuzione ionica prima che l'app si chiuda
- 26. Esegui qualcosa appena prima di esaurire la memoria
- 27. L'animazione jQuery non funziona correttamente alla prima esecuzione
- 28. Gradle non riesce a sincronizzare anche alla prima esecuzione
- 29. Voglio combinare la prima funzione con la seconda, quindi posso chiamarla solo una volta
- 30. Esegui Javascript Ajax chiama solo quando viene visualizzata la pagina
grazie Bhupendra – Eldhose
siete i benvenuti :) – Bhupendra
roba di cracking @Bhupendra, stavo cercando di scrivere un file di impostazioni plist per l'archivio dei documenti degli utenti, la tua strada è molto meglio – MagicalArmchair