Прекратите использовать статические NSString и вместо этого перейдите в словарь plist.

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

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

Есть идеи?


person malaki1974    schedule 14.04.2011    source источник


Ответы (1)


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

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

#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];
}

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

#define kCGRectY ([[(AppDelegateClass*)[[UIApplication sharedApplication] delegate] getStringForKey:@"kCGRectY"] intValue])
person ughoavgfhw    schedule 14.04.2011
comment
Спасибо за ответ. Я попробую это позже сегодня и отчитаюсь. - person malaki1974; 15.04.2011