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

Mar*_*77G 4 iphone xcode objective-c plist ios

我正在编写一款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//
}
Run Code Online (Sandbox Code Playgroud)

(这就是我实现Level Level的方法)

#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
Run Code Online (Sandbox Code Playgroud)

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

附加:(这是我认为我需要设置plist的方式 - 数据模型只是初始化我的级别的三个变量(上图).如果你查看我当前的plist,可能会更清楚它是如何设置的,但每个级别由以下各项组成:级别编号,级别速度和表示该级别所需序列的数字数组.)

我目前的plist设置

现在,如果我确实有正确的设置,我如何将值加载到我的程序中?

tas*_*oor 11

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

  • 获取资源文件的路径.(但是,请注意[NSBundle mainBundle],因为它不会在单元测试中返回单元测试包.)

NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"];
  • 您的根对象是一个级别数组.将其加载到NSArray中.
// this is autoreleased. you can retain it if needed
NSArray *levelArray = [NSArray arrayWithContentsOfFile:plistPath];
  • 现在你有了一系列关卡.每个级别都是字典.加载级别i(从0开始计数).
NSDictionary *level = [levelArray objectAtIndex:i];
  • 现在,您可以使用objectForKey方法从级别字典中获取对象.例如,要获取序列数组:
NSArray *seq = [level objectForKey:@"levelSequence"];
  • 您可以循环使用levelArray为您的所有级别分配,初始化和添加到级别数组.

希望能帮助到你.请注意,我没有编译代码,因此可能存在一些拼写错误.