游戏数据存储的四种常用方式
标签:
杂谈 |
分类: COSCOS2D |
- //=================NSKeyedArchiver========================
- NSString
*saveStr1 = @"我是"; - NSString
*saveStr2 = @"数据"; - NSArray
*array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; - //----Save
- //这一句是将路径和文件名合成文件完整路径
- NSString
*Path = [NSSearchPathForDirectori esInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; - NSString
*filename = [Path stringByAppendingPathCom ponent:@"saveDatatest"]; - [NSKeyedArchiver
archiveRootObject:array toFile:filename]; - //用于测试是否已经保存了数据
- saveStr1
= @"hhhhhhiiii"; - saveStr2
=@"mmmmmmiiii"; - //----Load
- array
= [NSKeyedUnarchiver unarchiveObjectWithFile: filename]; - saveStr1
= [array objectAtIndex:0]; - saveStr2
= [array objectAtIndex:1]; - CCLOG(@"str:%@",saveStr1);
- CCLOG(@"astr:%@",saveStr2);
首先介绍第二种保存方式:NSUserDefaults
代码很简单就不多解释了直接上代码:
- //=================NSUserDefaults========================
- NSString
*saveStr1 = @"我是"; - NSString
*saveStr2 = @"数据"; - NSArray
*array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; - //Save
- NSUserDefaults
*saveDefaults = [NSUserDefaults standardUserDefaults]; - [saveDefaults
setObject:array forKey:@"SaveKey"]; - //用于测试是否已经保存了数据
- saveStr1
= @"hhhhhhiiii"; - saveStr2
=@"mmmmmmiiii"; - //---Load
- array
= [saveDefaults objectForKey:@"SaveKey"]; - saveStr1
= [array objectAtIndex:0]; - saveStr2
= [array objectAtIndex:1]; - CCLOG(@"str:%@",saveStr1);
- CCLOG(@"astr:%@",saveStr2);
首先介绍第三种保存方式:Write写入方式
代码很简单就不多解释了直接上代码:
- //=================Write写入方式========================
- NSString
*saveStr1 = @"我是"; - NSString
*saveStr2 = @"数据"; - NSArray
*array = [NSArray arrayWithObjects:saveStr1, saveStr2, nil]; - //----Save
- NSArray
*paths = NSSearchPathForDirectori esInDomains(NSDocumentDirectory, NSUserDomainMask, YES); - NSString
*documentsDirectory = [paths objectAtIndex:0]; - if
(!documentsDirectory) { -
NSLog(@"没找到"); - }
- NSMutableArray
*saveDataArray=nil; - NSString
*appFile = [documentsDirectory stringByAppendingPathCom ponent:@"Savedatas.plist"]; - [[NSArray
arrayWithObjects:array,nil] writeToFile:appFile atomically:NO]; - //用于测试是否已经保存了数据
- saveStr1
= @"hhhhhhiiii"; - saveStr2
=@"mmmmmmiiii"; - //----Load
- if([[NSFileManager
defaultManager] fileExistsAtPath:appFile]){ -
saveDataArray = [NSMutableArray arrayWithContentsOfFile:appFile]; - }
else{ -
saveDataArray = [NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Savedatas" ofType:@ "plist"]]; - }
- NSArray
*strArray = [saveDataArray objectAtIndex:0]; - saveStr1
= [strArray objectAtIndex:0]; - saveStr2
= [strArray objectAtIndex:1]; - CCLOG(@"str:%@",saveStr1);
- CCLOG(@"astr:%@",saveStr2);
不论哪种形式代码都很容易理解,那么以上三种保存方式代码中都带有如下两行代码;
- saveStr1
= "hhhhhhiiii";@ - saveStr2
=@"mmmmmmiiii";
我已经注释上了,为了验证是否保存数据成功,如果没有保存成功,最后打印的肯定就是hhhhhhiiiiiiiii,mmmmiiiii啦~正常保存的话如下图控制台信息:
http://img1.51cto.com/attachment/201111/151236603.png
由于本章介绍过于简单,那么下面Himi对Write写入方式保存数据和读取数据封装了两个方法这里放出,给童鞋们行个方便:(其他两种大家封装起来风容易了,这里就不写了);
- //保存游戏数据
- //参数介绍:
- //
(NSMutableArray *)data :保存的数据 - //
(NSString *)fileName :存储的文件名 - -(BOOL)
saveGameData:(NSMutableArray *)data saveFileName:(NSString *)fileName - {
-
NSArray *paths = NSSearchPathForDirectori esInDomains(NSDocumentDirectory, NSUserDomainMask, YES); -
NSString *documentsDirectory = [paths objectAtIndex:0]; -
if (!documentsDirectory) { -
NSLog(@"Documents directory );not found!" -
return NO; -
} -
NSString *appFile = [documentsDirectory stringByAppendingPathCom ponent:fileName]; -
return ([data writeToFile:appFile atomically:YES]); - }
- //读取游戏数据
- //参数介绍:
- //
(NSString *)fileName :需要读取数据的文件名 - -(id)
loadGameData:(NSString *)fileName - {
-
NSArray *paths = NSSearchPathForDirectori esInDomains(NSDocumentDirectory, NSUserDomainMask, YES); -
NSString *documentsDirectory = [paths objectAtIndex:0]; -
NSString *appFile = [documentsDirectory stringByAppendingPathCom ponent:fileName]; -
NSMutableArray *myData = [[[NSMutableArray alloc] initWithContentsOfFile:appFile] autorelease]; -
return myData; - }
使用代码如下:
- NSString
*saveStr1 "测试保存读取";= @ - NSString
*saveStr2 = @"两个函数"; - NSMutableArray
*array = [NSMutableArray arrayWithObjects:saveStr1, saveStr2, nil]; - [self
saveGameData:array saveFileName:@"Himi"]; - NSMutableArray*temp
=(NSMutableArray*)[self loadGameData:@"Himi"]; - CCLOG(@"%@--%@",[temp
objectAtIndex:0],[temp objectAtIndex:1]);
运行效果截图如下:
http://img1.51cto.com/attachment/201111/151336701.png
这里Himi要提醒大家两点细节也是需要注意的地方:
- NSUserDefaults
*saveDefaults = [NSUserDefaults standardUserDefaults]; - NSMutableArray
*arraySaveData =[saveDefaults objectForKey:@"OhSaveData"]; - //NSMutableArray
*arraySaveData=[NSMutableArray arrayWithArray:[saveDefaults objectForKey:@"OhSaveData"]];
- NSUserDefaults
*saveDefaults = [NSUserDefaults standardUserDefaults]; - [saveDefaults
setObject:arraySaveData forKey:@"已经存在的文件名"];
arraySaveData:表示新的数据数组
本文出自 “李华明Himi” 博客,请务必保留此出处http://xiaominghimi.blog.51cto.com/2614927/709144

加载中…