2012-02-10 5 views
1

私はObjective-CとiOSの開発には新しく、正しいことをしているかどうかはわかりません。とにかく、基本的には、私はファイルのConfigs.plistを持っています。これは現在、Key(Value:Customer:GenericとShort_Code:Default)の2つのセットを持っています。 Objective-Cでは、すべてにアクセスできるグローバル構成を作成する方法はありますか

extern NSString * const CUSTOMER; 
extern NSString * const SHORT_CODE; 

@interface Configs 
+ (void)initialize; 
+ (NSDictionary *)getConfigs; 
@end 

Configs.h

Configs.m

#import "Configs.h" 

NSString * const CUSTOMER = @"Customer"; 
NSString * const SHORT_CODE = @"Short_Code"; 

static NSDictionary *myConfigs; 

@implementation Configs 
+ (void)initialize{ 
    if(myConfigs == nil){ 
     NSString *path = [[NSBundle mainBundle] pathForResource:@"Configs" ofType:@"plist"]; 
     settings = [[NSDictionary alloc] initWithContentsOfFile:path]; 
    } 
} 

+ (NSDictionary *)getConfigs{ 
    return settings; 
} 
@end 

とテストファイルTest.m上:私はこれらを作成したので、これらのデータは、すべてのクラスに簡単にアクセスできるようにしたいです:

NSLog(@"Customer: %@", [[Configs getConfigs] objectForKey:CUSTOMER]); 
NSLog(@"Short Code: %@", [[Configs getConfigs] objectForKey:SHORT_CODE]); 

このアプローチは機能しますが、これを行うにはより良い方法があるかどうかを知りたいと思います。

答えて

2

実行中に設定が変更されない限り、これは良いことだと思います。それがない場合は、このような何かを行うことができるでしょうので、あなたは、プロパティとしてコンフィグをさらすシングルトンとの方がいいでしょう:

[[Config shared] customer]; 
[[Config shared] setShortCode:@"CODE"]; 

あなたはまだPLISTから設定を初期化、またはプロトコルをコーディング実装することができNSUserDefaultsに保存します。

+0

ありがとうございます。私はあなたが何を意味しているのかよく理解していませんでしたが、これは私がもっと読む必要があるトピックです。とにかく、はい、実行中に構成は変更されません。構成は基本的にビルド前の要件です。 – yoninja

+0

ええ、私はあなたの設定が変更可能であることをかなり確信していたので、変更可能な設定をどう扱うかについていくつかの洞察を与えたいと思います。しかし、それが静的であれば、あなたのソリューションは非常に良いと思うよりも。 – lawicko

関連する問題