http://blog.csdn.net/yuri99/article/details/5787503
书上提到了4种方法,与归档相关的2种.看起来很麻烦.不用了.(关键是代码用的很多)
第一种,最简单的写法是用plist来存储一些字符串相关的配置文件.
无论是iphone还是ipad,数据都只能存储在沙盒中.
这个方面就是获取到沙盒中的某个文件:
- - (NSString *)dataFilePath {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(
- NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- return [documentsDirectory stringByAppendingPathComponent:你的文件];
- }
保存的代码,field是输入框控件
- NSMutableArray *array = [[NSMutableArray alloc] init];
- [array addObject:field1.text];
- [array addObject:field2.text];
- [array addObject:field3.text];
- [array addObject:field4.text];
- [array writeToFile:[self dataFilePath] atomically:YES];
- [array release];
读取的代码:
- NSString *filePath = [self dataFilePath];
- if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
- NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath];
- field1.text = [array objectAtIndex:0];
- field2.text = [array objectAtIndex:1];
- field3.text = [array objectAtIndex:2];
- field4.text = [array objectAtIndex:3];
- [array release];
- }
第二种,可以用来保存任何形式的数据,比较像使用java的outputstream
写入数据:
- NSString *path = [self dataFilePath];
- NSString *str= @"this is a string";
- int i = 100;
- float f = 98.3333f;
- NSMutableData *writer = [[NSMutableData alloc] init];
- [writer appendData:[str dataUsingEncoding:NSUTF8StringEncoding]]; //自动根据编码转化
- [writer appendBytes:&i length:sizeof(i)];
- [writer appendBytes:&f length:sizeof(f)];
- [writer writeToFile:path atomically:YES];
- [writer release];
读取数据:
- int ii;
- float ff;
- NSString *ttemp;
- NSData *reader = [NSData dataWithContentsOfFile:path];
- ttemp = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [temp length])]
- encoding:NSUTF8StringEncoding];
- [reader getBytes:&ii range:NSMakeRange([temp length], sizeof(ii))];
- [reader getBytes:&ff range:NSMakeRange([temp length] + sizeof(ii), sizeof(ff))];
- NSLog(@"string:%@ int:%i float:%f", ttemp, ii, ff);
- [temp release];
- [ttemp release];
- [path release];
第三种,貌似可以用来保存像图片这样的数据
- bool writeApplicationData(NSData *data, NSString *fileName)
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- if (!documentsDirectory) {
- NSLog(@"Documents directory not found!");
- return NO;
- }
- NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
- return ([data writeToFile:appFile atomically:YES]);
- }
- NSData *applicationDataFromFile(NSString *fileName)
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString *documentsDirectory = [paths objectAtIndex:0];
- NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName];
- NSData *myData = [[[NSData alloc] initWithContentsOfFile:appFile] autorelease];
- return myData;
- }