2012-02-19 38 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,你可以把一個私人常數是這樣的:

static NSString * const kConfigurationFileBaseName = @"Config"; 

你也可以有一個返回路徑的方法:

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

它直接的情況並不少見硬編碼的文件名在pathToConfigurationFile而不是一個常數。常量通常只有在值多次使用的情況下才需要。如果給定的常量只出現一次,那麼將值移到其他地方有時會使代碼更難理解。這些只是準則,而不是規則。

如果你需要不斷本身是公開的,那麼你就聲明是這樣的MYConfiguration.h

extern NSString * const kMYConfigurationFileBaseName; 

,然後在.M定義它:

NSString * const kMYConfigurationFileBaseName = @"Config"; 

但在關鍵所有這些都是你在一個與使用常量相關的頭文件中定義這些常量。你不會創建一些中心的「MYGlobals」傾倒所有東西。

0

你可以使用NSUserDefaults

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

當對象處理像NSDictionary,你可能有將其轉換爲NSData的實例。分別

[NSKeyedArchiver archivedDataWithRootObject:(id)]; 

[NSKeyedUnarchiver unarchiveObjectWithData:(NSData *)]; 

:這可以通過下面的方法來完成。

相關問題