在IOS的数据处理中常用的四种数据存取方式

1.NSKeyedArchiver

2.NSUserDefaults

3. Write写入方式

4. SQLite3

首先介绍第一种保存方式:NSKeyedArchiver

代码很简单就不多解释了直接上代码:

  1. //=================NSKeyedArchiver========================
  2. NSString *saveStr1 =@"我是";
  3. NSString *saveStr2 =@"数据";
  4. NSArray *array = [NSArrayarrayWithObjects:saveStr1, saveStr2, nil];
  5. //----Save
  6. //这一句是将路径和文件名合成文件完整路径
  7. NSString *Path =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];
  8. NSString *filename = [PathstringByAppendingPathComponent:@"saveDatatest"];
  9. [NSKeyedArchiverarchiveRootObject:array toFile:filename];
  10. //用于测试是否已经保存了数据
  11. saveStr1 =@"hhhhhhiiii";
  12. saveStr2 =@"mmmmmmiiii";
  13. //----Load
  14. array = [NSKeyedUnarchiverunarchiveObjectWithFile: filename];
  15. saveStr1 = [arrayobjectAtIndex:0];
  16. saveStr2 = [arrayobjectAtIndex:1];
  17. CCLOG(@"str:%@",saveStr1);
  18. CCLOG(@"astr:%@",saveStr2);

 

首先介绍第二种保存方式:NSUserDefaults

代码很简单就不多解释了直接上代码:

  1. //=================NSUserDefaults========================
  2. NSString *saveStr1 =@"我是";
  3. NSString *saveStr2 =@"数据";
  4. NSArray *array = [NSArrayarrayWithObjects:saveStr1, saveStr2, nil];
  5. //Save
  6. NSUserDefaults *saveDefaults =[NSUserDefaults standardUserDefaults];
  7. [saveDefaultssetObject:array forKey:@"SaveKey"];
  8. //用于测试是否已经保存了数据
  9. saveStr1 =@"hhhhhhiiii";
  10. saveStr2 =@"mmmmmmiiii";
  11. //---Load
  12. array = [saveDefaultsobjectForKey:@"SaveKey"];
  13. saveStr1 = [arrayobjectAtIndex:0];
  14. saveStr2 = [arrayobjectAtIndex:1];
  15. CCLOG(@"str:%@",saveStr1);
  16. CCLOG(@"astr:%@",saveStr2);

 

首先介绍第三种保存方式:Write写入方式

代码很简单就不多解释了直接上代码:

 

  1. //=================Write写入方式========================
  2. NSString *saveStr1 =@"我是";
  3. NSString *saveStr2 =@"数据";
  4. NSArray *array = [NSArrayarrayWithObjects:saveStr1, saveStr2, nil];
  5. //----Save
  6. NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
  7. NSString*documentsDirectory = [paths objectAtIndex:0];
  8. if(!documentsDirectory) {
  9. NSLog(@"没找到");
  10. }
  11. NSMutableArray*saveDataArray=nil;
  12. NSString *appFile =[documentsDirectory stringByAppendingPathComponent:@"Savedatas.plist"];
  13. [[NSArrayarrayWithObjects:array,nil] writeToFile:appFileatomically:NO];
  14. //用于测试是否已经保存了数据
  15. saveStr1 =@"hhhhhhiiii";
  16. saveStr2 =@"mmmmmmiiii";
  17. //----Load
  18. if([[NSFileManager defaultManager]fileExistsAtPath:appFile]){
  19. saveDataArray =[NSMutableArrayarrayWithContentsOfFile:appFile];
  20. } else{
  21. saveDataArray =[NSMutableArray arrayWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"Savedatas"ofType:@"plist"]];
  22. }
  23. NSArray *strArray =[saveDataArray objectAtIndex:0];
  24. saveStr1 = [strArrayobjectAtIndex:0];
  25. saveStr2 = [strArrayobjectAtIndex:1];
  26. CCLOG(@"str:%@",saveStr1);
  27. CCLOG(@"astr:%@",saveStr2);

不论哪种形式代码都很容易理解,那么以上三种保存方式代码中都带有如下两行代码;

 

  1. saveStr1 =@"hhhhhhiiii";
  2. saveStr2 =@"mmmmmmiiii";

由于本章介绍过于简单,那么下面Himi对Write写入方式保存数据和读取数据封装了两个方法这里放出,给童鞋们行个方便:(其他两种大家封装起来风容易了,这里就不写了);

封装的函数如下:

  1. //保存游戏数据
  2. //参数介绍:
  3. // (NSMutableArray *)data :保存的数据
  4. //(NSString *)fileName :存储的文件名
  5. -(BOOL) saveGameData:(NSMutableArray *)datasaveFileName:(NSString *)fileName
  6. {
  7. NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
  8. NSString *documentsDirectory =[paths objectAtIndex:0];
  9. if (!documentsDirectory){
  10. NSLog(@"Documents directory notfound!");
  11. return NO;
  12. }
  13. NSString *appFile =[documentsDirectorystringByAppendingPathComponent:fileName];
  14. return ([data writeToFile:appFileatomically:YES]);
  15. }
  16. //读取游戏数据
  17. //参数介绍:
  18. //(NSString *)fileName :需要读取数据的文件名
  19. -(id)loadGameData:(NSString *)fileName
  20. {
  21. NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
  22. NSString *documentsDirectory =[paths objectAtIndex:0];
  23. NSString *appFile =[documentsDirectorystringByAppendingPathComponent:fileName];
  24. NSMutableArray *myData =[[[NSMutableArray alloc] initWithContentsOfFile:appFile]autorelease];
  25. return myData;
  26. }

使用代码如下:

  1. NSString*saveStr1 = @"测试保存读取";
  2. NSString *saveStr2 =@"两个函数";
  3. NSMutableArray*array = [NSMutableArray arrayWithObjects:saveStr1, saveStr2,nil];
  4. [self saveGameData:arraysaveFileName:@"Himi"];
  5. NSMutableArray*temp=(NSMutableArray*)[self loadGameData:@"Himi"];
  6. CCLOG(@"%@--%@",[temp objectAtIndex:0],[tempobjectAtIndex:1]);

1.对于取出数据的时候需要注意,例如如下代码:

  1. NSUserDefaults*saveDefaults = [NSUserDefaultsstandardUserDefaults];
  2. NSMutableArray *arraySaveData=[saveDefaults objectForKey:@"OhSaveData"];
  3. //NSMutableArray *arraySaveData=[NSMutableArrayarrayWithArray:[saveDefaults objectForKey:@"OhSaveData"]];

第二句代码是通过一个文件名获取你存储的数据,返回数据数组,但是!一定要注意这里返回的数据数组是不可修改的!及时你将读取的数据赋给一个可修改的数组中也一样无法修改其中的数据,所以如果你想将取出的数据进行修改那么这里需要要使用第三行代码来获取,这里Himi将获取出的数据数组首先copy给了可修改数组中,那么此时你的可修改数组就可以正常修改了!

2.修改已经的存储文件;代码如下:

  1. NSUserDefaults*saveDefaults = [NSUserDefaultsstandardUserDefaults];
  2. [saveDefaultssetObject:arraySaveData forKey:@"已经存在的文件名"];


 

OK,本篇就介绍这里吧~继续忙了~

 本文出自 “李华明Himi”博客,请务必保留此出处http://xiaominghimi.blog.51cto.com/2614927/709144

你可能感兴趣的:(在IOS的数据处理中常用的四种数据存取方式)