В Objective-C, как я могу сделать глобальную конфигурацию, которая доступна для всех? - PullRequest
1 голос
/ 10 февраля 2012

Я новичок в разработке Objective-C и iOS, и я не уверен, правильно ли я это делаю. Во всяком случае, в основном у меня есть файл Configs.plist, который на данный момент имеет два набора ключей: Value (Customer: Generic и Short_Code: Default). Я хочу, чтобы эти данные были легко доступны для всех классов, поэтому я создал их:

Configs.h

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

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

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]);

Дело в том, что этот подход работает, но я хочу знать, есть ли лучшие способы сделать это.

1 Ответ

2 голосов
/ 10 февраля 2012

Я думаю, что это хорошо, если ваша конфигурация не изменяется во время выполнения.Если это так, то вам лучше, если синглтон представит вашу конфигурацию как свойства, так что вы сможете сделать что-то вроде этого:

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

Вы все равно можете запустить конфигурацию из plist или реализоватьпротокол кодирования для хранения его в NSUserDefaults .

...