停止使用静态NSStrings并转而使用plist字典

时间:2011-04-14 23:04:14

标签: iphone dictionary 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)];

有什么想法吗?

1 个答案:

答案 0 :(得分: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])