関数を1回だけ実行できる方法はありますか(アプリが更新またはインストールされたとき)?Objective C関数を使用する必要があるため、runスクリプトを使用できません。
質問する
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の答えの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 に答える