iphone中保存数据的一些方法 zhuan

http://blog.csdn.net/yuri99/article/details/5787503


书上提到了4种方法,与归档相关的2种.看起来很麻烦.不用了.(关键是代码用的很多)

 

第一种,最简单的写法是用plist来存储一些字符串相关的配置文件.

 

无论是iphone还是ipad,数据都只能存储在沙盒中.

 

这个方面就是获取到沙盒中的某个文件:

 

  1. - (NSString *)dataFilePath {  
  2.     NSArray *paths = NSSearchPathForDirectoriesInDomains(  
  3.                                                          NSDocumentDirectory, NSUserDomainMask, YES);  
  4.     NSString *documentsDirectory = [paths objectAtIndex:0];  
  5.     return [documentsDirectory stringByAppendingPathComponent:你的文件];  
  6. }  

 

保存的代码,field是输入框控件

 

  1. NSMutableArray *array = [[NSMutableArray alloc] init];  
  2.     [array addObject:field1.text];  
  3.     [array addObject:field2.text];  
  4.     [array addObject:field3.text];  
  5.     [array addObject:field4.text];  
  6.     [array writeToFile:[self dataFilePath] atomically:YES];  
  7.     [array release];  

 

读取的代码:

  1. NSString *filePath = [self dataFilePath];  
  2.     if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {  
  3.         NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];  
  4.         field1.text = [array objectAtIndex:0];  
  5.         field2.text = [array objectAtIndex:1];  
  6.         field3.text = [array objectAtIndex:2];  
  7.         field4.text = [array objectAtIndex:3];  
  8.         [array release];  
  9.     }  

 

 

第二种,可以用来保存任何形式的数据,比较像使用java的outputstream

 

写入数据:

 

  1. NSString *path = [self dataFilePath];  
  2. NSString *str= @"this is a string";   
  3. int i = 100;   
  4. float f = 98.3333f;   
  5.   
  6.   
  7. NSMutableData *writer = [[NSMutableData alloc] init];   
  8.   
  9. [writer appendData:[str dataUsingEncoding:NSUTF8StringEncoding]]; //自动根据编码转化  
  10. [writer appendBytes:&i length:sizeof(i)];   
  11. [writer appendBytes:&f length:sizeof(f)];   
  12. [writer writeToFile:path atomically:YES];   
  13. [writer release];  

 

读取数据:

  1. int ii;   
  2. float ff;   
  3. NSString *ttemp;   
  4.    
  5. NSData *reader = [NSData dataWithContentsOfFile:path];   
  6. ttemp = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]   
  7.                                   encoding:NSUTF8StringEncoding];   
  8. [reader getBytes:&ii range:NSMakeRange([temp length], sizeof(ii))];   
  9. [reader getBytes:&ff range:NSMakeRange([temp length] + sizeof(ii), sizeof(ff))];   
  10.    
  11. NSLog(@"string:%@  int:%i float:%f", ttemp, ii, ff);   
  12. [temp release];   
  13. [ttemp release];   
  14. [path release];   

 

第三种,貌似可以用来保存像图片这样的数据

 

  1. bool writeApplicationData(NSData *data, NSString *fileName)  
  2.     {  
  3.         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  4.         NSString *documentsDirectory = [paths objectAtIndex:0];  
  5.         if (!documentsDirectory) {  
  6.             NSLog(@"Documents directory not found!");  
  7.             return NO;  
  8.         }  
  9.         NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];  
  10.         return ([data writeToFile:appFile atomically:YES]);  
  11.     }  
  12.    
  13. NSData *applicationDataFromFile(NSString *fileName)  
  14.     {  
  15.         NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);  
  16.         NSString *documentsDirectory = [paths objectAtIndex:0];  
  17.         NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];  
  18.         NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease];  
  19.         return myData;  
  20.     }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值