0

私は非常に奇妙な状況にあります。

私は次のようにAppDelegateを使用しています:

appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

そこにさまざまな値を保存して、アプリケーション間で共有します。

例えば

@property (nonatomic, retain) NSString *campaignTitle;

ユーザーが初めてアプリケーションを開いたとき-プロパティに値を割り当てて、アプリケーションのライフサイクル中に数回でも変更することができます。

例えば

appDelegate.campaignTitle = theTitle;

ただし、ユーザーがホームボタンをクリックしてからアプリケーションを再度開いた場合、新しい値を割り当てようとすると、appDelegateの値は変更されず、古い値のままになります。

なにが問題ですか?

4

2 に答える 2

2

私の理解では、appDelegateに保存する値は、セッションに対してのみ保存されます。アプリを閉じたり、アプリを再度開いたりしてもデータが保持されるようにするには、データを保存します。

これを行う最も簡単な方法は、NSUserDefaultsを使用することです

//store the integer 35 for the key "ageKey"
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:35 forKey:@"ageKey"];
...
//retrieve the data from the key "ageKey"
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSInteger age = [defaults integerForKey:@"ageKey"];

より複雑な状況では、CoreDataをお勧めします:

http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/cdProgrammingGuide.html

于 2013-01-08T09:57:21.740 に答える
1

この方法でAppDelegateを使用することはできません。永続的なストアとして設計されていません。

保存するデータが小さい場合は、NSUserDefaultsを使用して保存する必要があります。より複雑なものについては、CoreDataを使用する必要があります。

次に、AppDelegateを使用してグローバルデータを保存するべきではありません。このタイプの情報を格納するには、別のシングルトンクラスを使用することをお勧めします。次に、データのgetメソッドとsetメソッドをカプセル化して、NSUserDefaultsに配置できます。

すなわち

SingletonClass.m

- (NSString*)campaignTitle
{
    return [[NSUserDefaults standardUserDefaults] objectForKey:@"CampaignTitle"];
}

- (void)setCampaignTitle:(NSString*)campaignTitle
{
    [[NSUserDefaults standardUserDefaults] setObject:campaignTitle forKey:@"CampaignTitle"];
    [[NSUserDefaults standardUserDefaults] synchronize]];
}
于 2013-01-08T10:06:45.217 に答える