Прекратите использовать статические строки NSStrings и перейдите к словарю plist - PullRequest
0 голосов
/ 15 апреля 2011

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

static NSUInteger kCGRectY = 520;
static NSUInteger kCGRectH = 340;
static NSString *kImage = @"Cover.png";
static NSString *kMImage = @"IMG_0172.JPG";
static NSString *kNames = @"WHO ELSE WORKED ON IT";
static NSString *kTitle = @"PROJECT DANDELION";
static NSString *kText  = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit";

В коде я использую это как:

[pageView setImage:[UIImage imageNamed:kImage]];
UIImage *image = [UIImage imageNamed:kMImage];
CGSize size = [image size];
[colorView setFrame:CGRectMake(0, kCGRectY, size.width, kCGRectH)];

Есть идеи?

1 Ответ

1 голос
/ 15 апреля 2011

Самый простой способ - использовать препроцессор для обработки изменения всего кода, который обращается к нему, и иметь объект или класс, обрабатывающий загрузку информации из списка.

Заменить объявления переменных этим кодомнапример, для каждой переменной:

#define kImage ([(AppDelegateClass*)[[UIApplication sharedApplication] delegate] getStringForKey:@"kImage"])

Затем в делегате приложения реализуйте метод getStringForKey:.

- (NSString *)getStringForKey:(NSString *)key {
    static NSDictionary *plist = nil;
    if(!plist) plist = [[NSDictionary alloc] initWithContentsOfFile:@"path/to/plist.plist"];
    return [plist objectForKey:key];
}

Обратите внимание, что этот код обрабатывает только строки, а не числа.Если вы хотите, чтобы ваши числа также приходили из списка, вы можете добавить их в виде строк и получить целочисленное значение:

#define kCGRectY ([[(AppDelegateClass*)[[UIApplication sharedApplication] delegate] getStringForKey:@"kCGRectY"] intValue])
...