簡體   English   中英

設置plist來存儲iPhone游戲的應用程序數據(而不是設置)

[英]Setting up a plist to store application data (not settings) for an iPhone game

我正在編寫一款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//
}

(這就是我實現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

我只是沒有得到如何設置一個plist來存儲我的數據以匹配我的模型。 請問有人可以給我一些建議嗎?

附加:(這是我認為我需要設置plist的方式 - 數據模型只是初始化我的級別的三個變量(上圖)。如果你查看我當前的plist,可能會更清楚它是如何設置的,但每個級別由以下各項組成:級別編號,級別速度和表示該級別所需序列的數字數組。)

我目前的plist設置

現在,如果我確實有正確的設置,我如何將值加載到我的程序中?

  • 將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為您的所有級別分配,初始化和添加到級別數組。

希望能幫助到你。 請注意,我沒有編譯代碼,因此可能存在一些拼寫錯誤。

您應該做的是創建一個包含所需的所有適用數據的NSDictionary ,並從中讀取並將其寫入NSUserDefaults

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM