2012-02-19 7 views
0

定数(プロパティリストのファイル名など)をobjective-cに格納する場合のベストプラクティスを考えてください。ファイル名とプロパティリスト名の定数を格納するベストプラクティス

私は、次のコードにハードコーディングされた「Config.plist」を改善したいと思います:

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"]; 
NSDictionary *rows = [[NSDictionary alloc]initWithContentsOfFile:plistPath]; 

答えて

1

通常、この種のロジックをMYConfigurationのようなモデルオブジェクトに移動することをお勧めします。こうすれば、明示的な方法でMYConfigurationを照会でき、NSDictionaryに直接アクセスすることはできません。

ファイルの名前に関して、実際に必要な再利用の程度に応じて、ファイルを抽象化する方法はたくさんあります(ここでは外に出すことができます)。

最初は定数です。 MYConfiguration.mでは、このように民間の定数を置くことができます:それは、直接ハードコードするファイルの名前も珍しくありません

- (NSString *)pathToConfigurationFile { 
    return [[NSBundle mainBundle] pathForResource:kConfigurationFileBaseName ofType:@"plist"]; 
} 

static NSString * const kConfigurationFileBaseName = @"Config"; 

また、パスを返すメソッドを持つことができます定数を持つよりむしろpathToConfigurationFileにあります。定数は多くの場合、値が複数回使用される場合にのみが必要です。与えられた定数が一度しか現れない場合、値を別の場所に移動すると、コードを理解しにくくなることがあります。これらは、規則ではなく、のガイドラインです。

あなたが公に利用可能であることを自身の定数が必要な場合は、その後、あなたはMYConfiguration.hでそれをこのように宣言します。その後、

extern NSString * const kMYConfigurationFileBaseName; 

と.Mでそれを定義します。

NSString * const kMYConfigurationFileBaseName = @"Config"; 

しかしにおけるキーこれらのすべては、定数の使用に関連するヘッダーにこれらの定数を定義することです。あなたは、すべてのためのいくつかの中心的な "MYGlobals"投棄地を作りません。

0

あなたはNSDictionaryのようなオブジェクトを扱う場合、あなたが持つかもしれNSUserDefaults

[[NSUserDefaults standardUserDefaults] setObject:(id) forKey:(NSString *)]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

を使用することができますそれをNSDataのインスタンスに変換します。それぞれ

[NSKeyedArchiver archivedDataWithRootObject:(id)]; 

[NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)]; 

:これは、以下の方法で行うことができます。

関連する問題