有沒有什麼方法可以讓我只能運行一次函數(應用程序更新或安裝時)?我不能使用運行腳本,因爲我應該使用客觀的c函數。僅在第一次運行時執行函數ios
回答
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"];
}
您可以在NSUserDefaults
中創建BOOL值鍵(例如isFirstLaunch = NO
),並在執行該功能後將其設置爲YES。
如果您想在用戶每次啓動應用程序時執行此操作,則需要在應用程序存在之前將其設置爲默認值(即將其重置爲AppDelegate中的-applicationWillTerminate:
方法)。
如果你想運行一些代碼時,應用程序或者是第一次安裝或每次更新後,那麼你可以從你的包
CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue];
閱讀應用程序的當前版本,之後你寫的用戶默認已經運行了代碼。
[[NSUserDefaults standardUserDefaults] setFloat:currentVersion
forKey:kLastVersionThatExecutedMyCodeKey];
下一次啓動應用程序時,將比較用戶默認值與捆綁版本的值。如果軟件包版本已更改,則應用程序已更新,這意味着您應該再次運行代碼並將新版本寫入用戶默認值。
應該是(缺少引號) - > [[NSUserDefaults的standardUserDefaults]的setFloat:CURRENTVERSION forKey:@ 「kLastVersionThatExecutedMyCodeKey」]; – mikemike396
@ Pyraego.com用一個小的'k'前綴一個變量名是一個常用的約定來表明它是一個常量。 Apple的框架在很多地方使用它。 'kLastVersionThatExecutedMyCodeKey'應該是一個變量,而不是一個字符串本身。 –
有趣!很高興知道。對困惑感到抱歉。 – mikemike396
這是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")
}
這Bhupendra的答案的Swift2.0版本,如果有人需要它!
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. 在第一次運行Greasemonkey腳本時執行函數
- 2. Android:僅在第一次運行和每次後續升級時執行代碼
- 3. EnumWindowsProc()僅在第一次運行程序時運行
- 4. .click()事件僅在第一次執行
- 5. 僅在第二次加載視圖時才運行函數
- 6. 寫入文件僅在第一次執行時給出新行
- 7. Orientationchange僅在第一次運行
- 8. Bootstrap datepicker僅在第一次運行
- 9. 如何僅運行一次函數
- 10. 如何僅在第一次調用函數時執行if語句?
- 11. POST函數運行兩次,第一次API調用失敗,第二次運行。
- 12. 僅在第一次回調時運行函數,但更優雅的方式
- 13. Python代碼不會在第一次運行時執行
- 14. QUnit僅運行第一次測試
- 15. 線程運行僅第一次
- 16. Shell腳本在第二次運行時使用第一次運行的參數
- 17. 第一次滾動時運行函數,然後再次不再
- 18. ng-repeat元素僅在第二次運行函數後填充
- 19. Java Jar:僅在第一次打開jar時執行方法?
- 20. 僅在第一次點擊時執行事件
- 21. Visual C++ Express .exe在第一次執行後再次運行
- 22. Javascript函數只能在第一次點擊時運行
- 23. AWS Lambda函數在第一次運行時工作,但不是第二次
- 24. SQLiteOpenHelper在第一次執行時崩潰
- 25. 如何在第一次執行後調用第二個函數?
- 26. iOS的 - 在運行時更改的限制僅適用第一次
- 27. 的iOS localizable.strings停止第一次運行
- 28. 使活動僅在第一次運行應用程序時運行
- 29. 程序僅在第一次運行時掛起?
- 30. 不僅在第一次運行時加載原始碼
謝謝Bhupendra – Eldhose
歡迎:) – Bhupendra
破解的東西@Bhupendra,我試圖寫一個plist設置文件到用戶文檔商店,你的方式好多了 – MagicalArmchair