有没有什么方法可以让我只能运行一次函数(应用程序更新或安装时)?我不能使用运行脚本,因为我应该使用客观的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