设置plist来存储iPhone游戏的应用程序数据(不是设置)

我正在写一个iPhone游戏,并与我的关卡数据硬编码很好地工作,但我想将水平数据存储在一个plist载入它启动。 我从来没有使用过plists,也没有理解如何根据我的数据模型设置plist。

下面是我现在如何硬编码:

(在我的appDelegate)

- (void)loadLevels { //setup NSNumber objects to load into sequences NSNumber * rID = [[[NSNumber alloc] initWithInt:0] autorelease]; NSNumber * bID = [[[NSNumber alloc] initWithInt:1] autorelease]; NSNumber * gID = [[[NSNumber alloc] initWithInt:2] autorelease]; NSNumber * yID = [[[NSNumber alloc] initWithInt:3] autorelease]; NSNumber * rbID = [[[NSNumber alloc] initWithInt:4] autorelease]; NSNumber * rgID = [[[NSNumber alloc] initWithInt:5] autorelease]; NSNumber * ryID = [[[NSNumber alloc] initWithInt:6] autorelease]; NSNumber * bgID = [[[NSNumber alloc] initWithInt:7] autorelease]; NSNumber * byID = [[[NSNumber alloc] initWithInt:8] autorelease]; NSNumber * gyID = [[[NSNumber alloc] initWithInt:9] autorelease]; //Level One's Sequence NSMutableArray * aSequence = [[[NSMutableArray alloc] initWithCapacity:1] autorelease]; [aSequence addObject: rID]; [aSequence addObject: bID]; [aSequence addObject: gID]; [aSequence addObject: yID]; [aSequence addObject: rbID]; [aSequence addObject: rgID]; [aSequence addObject: ryID]; [aSequence addObject: bgID]; [aSequence addObject: byID]; [aSequence addObject: gyID]; // Load level One _levels = [[[NSMutableArray alloc] init] autorelease]; Level *level1 = [[[Level alloc] initWithLevelNum:1 levelSpeed:1.0 levelSequence:aSequence] autorelease]; [_levels addObject:level1]; //do the same thing for subsequent levels// } 

(这是我如何实现我的级别类)

 #import "Level.h" @implementation Level @synthesize levelNum = _levelNum; @synthesize levelSpeed = _levelSpeed; @synthesize levelSequence = _levelSequence; - (id)initWithLevelNum:(int)levelNum levelSpeed:(float)levelSpeed levelSequence:(NSMutableArray *)levelSequence { if ((self = [super init])) { self.levelNum = levelNum; self.levelSpeed = levelSpeed; self.levelSequence = [[[NSMutableArray alloc] initWithArray:levelSequence] autorelease]; } return self; } - (void)dealloc { [_levelSequence release]; _levelSequence = nil; [super dealloc]; } @end 

我只是没有得到如何设置一个plist来存储我的数据来匹配我的模型。 任何人都可以给我一些build议吗?

另外:(这里是我怎么想我需要设置plist – 数据模型只是初始化我的水平的三个variables(上面)如果你看我目前的plist,它可能更清楚如何设置,但每个级别包括:级别号码,级别速度以及表示该级别所需序列的数字数组。

我目前的plist设置

现在,如果我确实正确地设置了这个设置,我该如何将这些值加载到我的程序中?

  • 将您的plist文件作为资源文件添加到您的项目中。 说,它的名字是config.plist

  • 获取资源文件的path。 (虽然,小心[NSBundle mainBundle],因为它不会在unit testing中返回unit testing包。)

 NSString * plistPath = [[NSBundle mainBundle] pathForResource:@“config”ofType:@“plist”];
  • 你的根对象是一个层次的数组。 加载它在一个NSArray。
 //这是autoreleased。 你可以保留它,如果需要的话
 NSArray * levelArray = [NSArray arrayWithContentsOfFile:plistPath];
  • 现在你有了一系列的关卡。 每个级别都是一本字典。 加载等级i(从0开始计数)。
 NSDictionary * level = [levelArray objectAtIndex:i];
  • 现在,您可以使用objectForKey方法从级别字典中获取对象。 例如,要获取序列数组:
 NSArray * seq = [level objectForKey:@“levelSequence”];
  • 您可以通过levelArray循环来分配,初始化和添加到所有级别的水平数组。

希望能帮助到你。 请注意,我没有编译代码,所以可能会有一些错别字。

你应该做的是创build一个NSDictionary与你想要的所有适用的数据,并从中读取并将其写入NSUserDefaults