2012-03-22 22 views
0

私は自分のアプリの設定を保存するために設定バンドルを使用しません。ユーザーがアプリ内の設定にアクセスできるようにしたい(かなり頻繁に変更することができます) 。私は両方を行うオプションがあることを認識していますが、今のところ、私はアプリ内で設定を保存する最適な場所を探しています。iPhoneアプリの設定を保存する最も効率的な代替方法

私は、(私が読んだものから、おそらくNSUserDefaultsのためにあまりにも多くの)設定を持っています。私が検討している2つの主要な選択肢は次のとおりです: 1)plistの辞書に設定を保存し、アプリケーションデリゲートのNSDictionaryプロパティに設定し、sharedDelegateでアクセスします。 2)設定をCore Dataエンティティ(Settingsエンティティの1行)に格納し、設定をアプリケーションデリゲートのSettingsオブジェクトにロードし、 sharedDelegate

この2つのうち最適な方法であるとパフォーマンスが向上しますか?

+0

NSDefaultsには多すぎますか?千の鍵があれば、おそらくはい。しかし、あなたはあなたの設定を間違っています。 – Costique

+1

大量の設定でNSUserDefaultsを使用したくない場合は、すべての設定を含むオブジェクトを作成しないでください。NSCodingプロトコルに準拠させ、アプリケーション終了時に保存するか、アクティブにして終了し、アプリケーションdidFinishLaunchingにロードしますか? – bennythemink

+1

多くのデータを保存すると、すべての "use' [ud synchronize] '!! 1111one" - あなたがstackoverflowで見た回答を忘れてしまいます。彼らはとにかく間違っています。すべての 'setObject:forKey:'の後に同期を呼び出さないでください。問題はありません。 –

答えて

3

NSUserDefaultsをそのまま使用してください。これはそのためのものです。なぜあなたはあまりにも多くのように感じるのですか?

また、後で設定バンドルを使用する場合は、とにかくNSUserDefaultsを使用する必要があります。

+0

上記の2つのオプションよりもパフォーマンスが優れていますか?上記の2つのいずれかが優れているケース(または設定の数)はありますか?私はこれらのボードをかなり広く読んできました。*私は、Marcus Zarraがコアデータの設定を保存することがより最適であると言っているものを見ましたが、どのスレッドが入っているのかわかりません彼がもっと*最適な時に*説明したと思う) – SAHM

+2

パフォーマンスの向上が目立つようにデフォルトにアクセスする状況は本当にありません。また、NSUserDefaultsは実際には単にplistであり、すでに存在するものを実装することになります。 – sosborn

1

あなたはNSUserDefaultsと一緒に行くべきです。 NSUserDefaultsがたくさんあると思うなら、私はあなたに1つのモデルクラスを作成し、それに付随することを提案します。 1つのモデルクラスを作成し、プロパティとして設定し、そのクラスのオブジェクトを作成してNSUserDefaultsに保存すると、一度実装するだけで簡単に実行できます。

@interface SettingsModelClass : NSObject 
{ 
    NSString *strSetting1; 
    BOOL boolSetting2; 
} 

@property (nonatomic,retain) NSString *strSetting1; 
@property (nonatomic,assign) BOOL boolSetting2; 

//実装における

@implementation SettingsModelClass 

@synthesize strSetting1, boolSetting2; 

-(void)dealloc 
{ 
    [strSetting1 release]; 
    [super dealloc]; 
} 

- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    //Encode properties, other class variables, etc 
    [encoder encodeObject:self.strSetting1 forKey:@"StringSetting"];  
    [encoder encodeBool:self.boolSetting2 forKey:@"BoolSetting"]; 
} 

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    self = [super init]; 
    if(self != nil) 
    { 
     //decode properties, other class vars 
     self.strSetting1 = [decoder decodeObjectForKey:@"StringSetting"]; 
     self.boolSetting2 = [decoder decodeBoolForKey:@"BoolSetting"]; 
    } 
    return self; 
} 

@end 

あなたは何の疑いがある場合は、コメントを残してください。私はあなたを助けるのが大好きです。

更新 はい、アプリケーションデリゲートを介してアクセスします。あるいは、シングルトンクラスのインスタンスとして作成することもできます。 このアプローチは、OOPS fundasを使用しているので、私が信じているこのパターンに従うことは打者です。

+0

この方法は、まっすぐなNSUserDefaultsを使用するよりもどの点(つまりいくつの設定)で有利になりますか? – SAHM

+0

また、アプリケーションデリゲートのSettingsModelClassオブジェクトに設定をロードし、アプリ全体でsharedDelegate経由でアクセスしますか?そうでない場合は、アプリ全体のさまざまなビューコントローラで設定をロード/アクセスするにはどうすればよいですか? – SAHM

+0

私の更新された回答 –

関連する問題