2011-12-02 17 views
0

私のアプリのリリースに近づくにつれ、私は安定したコードを使ってアプリが起動されているかどうかを確認していることを確認しようとしています。セットアップ)。これは、アプリケーションのバージョンと更新を考慮しないノンフリルの方法ですか?アプリが起動されたかどうかを判断するのに非常に堅実な方法ですか?私のアプリデリゲートdidFinishLaunchingWithOptions方法でApproaching Appリリース:2クイック質問

、私は毎回次の手順を実行します。

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 

if(![defaults objectForKey:@"not_first_launch"]) 
{ 
    NSLog(@"This is the first time the app has been launched.\nPerforming first-time setup procedures..."); 
    [self runFirstTimeSetup]; 
} 

は私の2番目の質問は基本的に、私は私の特定のためにユーザーのドキュメントディレクトリことを、私はアプリのアップデートをリリースする場合と仮定することができていますアプリのサンドボックスは消去されません。アプリのアップデートは単にディレクトリに追加するだけで、それを一掃して再インストールするのではないのですか?私はアプリを更新してもユーザーのファイルが必要ですが(かなり明白ですが)、間違った仮定をして、アップデートをリリースするたびにユーザーにデータを失わせたくありません。

ありがとうございます!

答えて

2

はい、それはNSUserDefaultsの良い使用です。

ユーザーデータは更新によって保持されます。

アプリに付属するデータと、実行中に生成されたデータを別々のビンに保存してください。そのため、前者を(アプリの更新を介して)変更する必要がある場合、後者は変更されません。例えば、両方を同じSQLiteテーブルに置かないでください。

+0

を持っているなら、私に知らせて、それは私が:) –

1

あなたは既に回答を受け入れていますが、件名に触れたいと思っています。アプリが最初に起動されている場合、私はチェックの方法は、このようなものです:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    ...normal code... 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if (![defaults objectForKey:@"kFirstUse"]) { 
     [defaults setObject:[NSDate date] forKey:@"kFirstUse"]; 
     [defaults synchronize]; 
    } 
} 

私は、これは、ユーザーの最初の打ち上げであるかどうかを確認しながら、私は、日付を保存するので、私は投稿したかった理由は、彼らの最初の打ち上げの。余分なコードがないので、私はなぜこの最初の起動日を保存しないのか考え出した。私はアプリでその情報を一切使っていませんが、将来私が考えているかもしれません。将来、私はApp Purchaseでの追加について考えていました。私は最初のユーザーに無料で提供します。これは、私が将来のために準備され、同時に私の目標を達成することを可能にします。

NSUserDefaults完全性のために、アプリのアップデートの間にキーを変更しないでください。そうしないと、そのオブジェクトは見つかりません。

もう1つの良い点は、その文字列がアプリケーションにそのデータを保存させるということです(行[defaults synchronize];)。アプリは定期的に自動的にデータを保存しますが、私は安全で、自分のものが保存されていることが気に入っています。

あなたはクールな他の質問

+1

クールを聞きたいものです。このスニペットは私にとっては今役に立つものです。投稿していただきありがとうございます。 – NCFUSN

+0

それはあなたを助けてくれてうれしいです。 – Andrew