来自plist

时间:2016-08-22 03:50:46

标签: ios objective-c plist

我有3个名为level0,level1,level2的plist文件,所有这个plist都具有相同的结构,它由数字变量和数组组成。我使用此plist中的数据初始化我的应用程序。

+(instancetype)levelWithNum:(int)levelNum; {
    NSString* fileName = [NSString stringWithFormat:@"level%i.plist", levelNum];
    NSString* levelPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:fileName];
    NSDictionary *levelDic = [NSDictionary dictionaryWithContentsOfFile:levelPath];
    NSAssert(levelDic, @"level no loaded");
    Level *l = [[Level alloc]init];
    l.coinsPerLvl = [levelDic[@"coinsPerLvl"] integerValue];
    l.words = levelDic[@"words"];
    return l;
}

现在我决定只使用一个plist并添加3个字典。我怎样才能从plist中读取一个字典,如上例所示,我使用plist文件。

坦克提供任何帮助!

enter image description here

2 个答案:

答案 0 :(得分:1)

您只需要一个代表根词典的中间变量,并从根词典中提取级别词典,例如:

(defun insert-weeks ()
  (interactive)
  (let ((p  52))
    (while (> p 0)
      (insert (format "* Week %2d\n" p))
      (setq p  (1- p)))))

希望有所帮助。

答案 1 :(得分:0)

将plist root作为数组(如下所示)。这样你就可以轻松获得关卡信息。

示例代码

+(void)levelWithNum:(int)levelNum {

NSString* fileName = @"level.plist";
NSString* levelPath = [[[NSBundle mainBundle]resourcePath]stringByAppendingPathComponent:fileName];
NSArray *levelsArray = [NSArray arrayWithContentsOfFile:levelPath];
NSAssert(levelsArray, @"level no loaded");


Level *l = [[Level alloc]init];
l.coinsPerLvl = [[levelsArray objectAtIndex:levelNum][@"coinsPerLvl"] integerValue];
l.words = [[levelsArray objectAtIndex:levelNum][@"words"] integerValue];
return l;
}

sample plist screen shot