标签:
//这是存储操作
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
NSString *name =@”default string“; [defaults setObject:firstName forKey:@"name"];
//获得UIImage实例 UIImage *image=[[UIImage alloc]initWithContentsOfFile:@"photo.jpg"]; NSData *imageData = UIImageJPEGRepresentation(image, 100);//UIImage对象转换成NSData [defaults synchronize];//用synchronize方法把数据持久化到standardUserDefaults数据库
感觉这个上面那个例子没啥用 呵呵 这是查阅资料看到的
//读取数据: NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString *name = [defaults objectForKey:@"name"];//根据键值取出name NSData *imageData = [defaults dataForKey:@"image"]; UIImage *Image = [UIImage imageWithData:imageData];//NSData转换为UIImage
不过name那个还是蛮有用的 这个 defaults 是个字典 一般取出东西都是要用key的;
@interface Possession:NSObject<NSCoding>{//遵守NSCoding协议 NSString *name;//待归档类型 } @implementation Possession -(void)encodeWithCoder:(NSCoder *)aCoder{ [aCoder encodeObject:name forKey:@"name"]; } -(void)initWithCoder:(NSCoder *)aDecoder{ name=[aDeCoder decodeObjectforKey:@"name"]; }
归档操作: 如果对Possession对象allPossession归档保存,只需要NSCoder子类NSKeyedArchiver的方法 archiveRootObject:toFile: 即可。这里说的allPossession就是模型对象 用Possession创建出来的对象;
NSString *path = [self possessionArchivePath];
[NSKeyedArchiver archiveRootObject:allPossessions toFile: path ];
解压操作: 同样调用NSCoder子类NSKeyedArchiver的方法unarchiveRootObject:toFile: 即可 allPossessions = [NSKeyedUnarchiver unarchiveObjectWithFile:path];缺点:归档的形式来保存数据,只能?一次性归档保存以及?一次性解压。所以只能针对小量数据,而且对数据操作比较 笨拙,即如果想改动数据的某?一小部分,还是需要解压整个数据或者归档整个数据,麻烦的要死;
Write写入方式:永久保存在磁盘中。具体方法为:
第?一步:获得文件即将保存的路径:
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask,YES);//使用C函数NSSearchPathForDirectoriesInDomains来获得沙盒中目录的全路
径。该函数有三个参数,目录类型、he domain mask、布尔值。其中布尔值表示是否需要通过?~扩展路径。 而且第?一个参数是不变的,即为NSSearchPathDirectory 。在IOS中后两个参数也是不变的,即为
NSUserDomainMask 和 YES。
NSString *ourDocumentPath =[documentPaths objectAtIndex:0];
还有?一种方法是使用NSHomeDirectory函数获得sandbox的路径。具体的用法为:
NSString *sandboxPath = NSHomeDirectory();
// Once you have the full sandbox path, you can create a path from it,但是不能在sandbox的本文件层上写 文件也不能创建目录,而应该是此基础上创建?一个新的可写的目录,例如Documents,Library或者temp。 NSString *documentPath = [sandboxPath
stringByAppendingPathComponent:@"Documents"];//将Documents添加到sandbox路径上,具体原 因前面分析了!
这两者的区别就是:使用NSSearchPathForDirectoriesInDomains比在NSHomeDirectory后面添加Document更加安全。因为该文件目 录可能在未来发送的系统上发生改变。最好使用第一种方法,再说了两种方法都差不多
第二步:生成在该路径下的文件:
NSString *FileName=[documentDirectory stringByAppendingPathComponent:fileName];//fileName就是保存文件的文件 名
第三步:往文件中写入数据:
[data writeToFile:FileName atomically:YES];//将NSData类型对象data写入文件,文件名为FileName
最后在路径中读出文件 NSData data=[NSData dataWithContentsOfFile:FileName options:0 error:NULL];//从FileName中读取出数据
标签:
原文地址:http://www.cnblogs.com/miaoqiang/p/4507761.html