[英]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文件添加為項目中的資源文件。 說,它的名字是config.plist
獲取資源文件的路徑。 (但是,請注意[NSBundle mainBundle],因為它不會在單元測試中返回單元測試包。)
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"config" ofType:@"plist"];
// this is autoreleased. you can retain it if needed NSArray *levelArray = [NSArray arrayWithContentsOfFile:plistPath];
NSDictionary *level = [levelArray objectAtIndex:i];
NSArray *seq = [level objectForKey:@"levelSequence"];
希望能幫助到你。 請注意,我沒有編譯代碼,因此可能存在一些拼寫錯誤。
您應該做的是創建一個包含所需的所有適用數據的NSDictionary
,並從中讀取並將其寫入NSUserDefaults
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.