有什么方法可以让我只运行一次功能(更新或安装应用程序时)?我不能使用运行脚本,因为我应该使用目标 c 函数。
问问题
9265 次
5 回答
45
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"];
}
于 2012-10-12T07:03:23.803 回答
7
这是Bhupendra 答案的 Swift 转换:
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")
}
于 2015-03-11T04:36:44.193 回答
3
如果您想在首次安装应用程序时或每次更新后运行一些代码,那么您可以从包中读取应用程序的当前版本
CGFloat currentVersion = [[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"] floatValue];
并在运行代码后将其写入用户默认值。
[[NSUserDefaults standardUserDefaults] setFloat:currentVersion
forKey:kLastVersionThatExecutedMyCodeKey];
下次启动应用程序时,将用户默认值与捆绑包版本进行比较。如果捆绑版本已更改,则应用程序已更新,这意味着您应该再次运行代码并将新版本写入用户默认值。
于 2012-10-12T06:22:32.107 回答
2
您可以在您的 中创建一个 BOOL 值键(例如isFirstLaunch = NO
)NSUserDefaults
,并在执行该功能后将其设置为 YES。
如果您想在用户每次启动应用程序时执行它,您需要在应用程序存在之前将键设置为默认值(即-applicationWillTerminate:
在 AppDelegate 中的方法中将其重置)。
于 2012-10-12T06:20:21.077 回答
1
这是 Bhupendra's Answer 的 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")
}
}
于 2015-09-06T05:59:44.563 回答