IOS学习笔记(五)数据存储

应用程序包: (bundle)包含了所有的资源文件和可执行文件

documents:保存应用运行时生成的需要持久化的数据,ITuns同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录

Library/Caches:保存应用运行时生成的需要持久化的数据, iTuns同步设备时不会备份该目录。一般存储体积较大、不需要备份的非重要数据

Library/Preference:保存应用的所有偏好设置,IOS的设置应用会在该目录中查找应用的设置信息。iTuns同步设备时会备份该目录

Tmp:保存应用运行时所需的临时数据,使用完毕侯再将响应的文件从该目录删除。应用没有运行时,系统也可能会清楚该目录下的文件。iTUns同步设备时不会备份该目录

---------------------------------------------------------------------

友情提示:

1.如果做数据存取方面的开发,测试工作最好在模拟器上先完成,模拟机上更好看数据文件路径。

2.iPhone开发中,如果做文件的读写操作,同差功能是没有错误提示的。如果想一个不存在的文件夹中写文件,读写文件的方法会正常执行,并且不会报错, 但是,文件不会写入!  

NSString *home = NSHomeDirectory();               home为应用程序主目录路径

NSString *tmpDir = NSTemporaryDirectory();      tmpDir为临时文件目录路径

 NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomaininMask domainMask, BOOL expandTilde);  <

NSArray *documents =  NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) ; <

NSString *docDir = documents[0];  <

第一个参数:要搜索的目录类型,枚举

第二个参数:要搜索的目录所在范围,通常是用户目录范围  通常是用户目录范围  NSUserDomainMask

第三个参数:是否展开波浪号?~  对应应用程序的,~代表程序当前目录

让视图滚动起来:

NSRange为一结构体:里面有两个参数:location, 和 length

NSRange range = NSMakeRange(content.length, 0);

[_textView scrollRangeToVisible:range];

------------------MAC技巧-----------------------------------

1.显示Mac隐藏文件的命令:   defaults write com apple.finder AppleShowAllFiles - bool true

2.隐藏Mac隐藏文件的命令:  defaults write com apple.finder AppleShowAllFiles - bool false

注意:需要重启  finder

 -------------------------------------——-----------------------------------------------------------------

IOS图像加载的4中方式:

相册:用户的相册资源,通过UIImagePickerController读取

应用程序包:与应用程序源文件同一目录,可通过文件路径读取

沙盒:沙盒目录即可以保存图片,也可以通过路径读取。

因特网:通过URL从网络傻姑娘下载图片读取

沙盒与应用程序包中的图像读取的方式是一样的,都是通过文件路径读取,不同的是路径不一样。

NSData提供了简单的网络数据加载:NSData和UIImage之间可以相互转换:

网络获取数据                     NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/img/520.gif"];  <

将NSData转成UIImage      NSData *data = [NSData dataWithContentsOfURL:url];   <

             UIImage  *image = [UIImage imageWithData:data];  <

UIImage转成NSData        compressionQuality   图像的范围为0.0(最低品质)到1.0(最高品质)的压缩系数

              NSData *data = UIImageJPEGRepresentation(UIImage *image, CGFloat compressionQuality);  < 

              [data writeToFile:path atomically:YES];  <

    

将图像数据写入相册中  UIImageWriteToSavePhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfl:), NULL);

            - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { };  <

相册资源访问通过UIImagePickerController类来读取

UIImagePickerController类集成自UINavigaitionController,是个独立的导航控制起,一般使用模态窗口的方式弹出

sourceType属性可指定选取器要选取的资源类型,有如下3中类型:

所有同步到iPhone的图像以及包括用户拍摄的图片在内的任何相册          UIImagePickerControllerSourceTypePhotoLibrary ; <

仅含相册                                       UIImagePickerControllerSourceTypeSavedPhotosAlbum ;  <

允许用户使用iPhone内置的摄像头拍照                       UIImagePickerControllerSourceTypeCamera ;  <

设置图像编辑,允许选取器框定的拉伸图像。默认为NO                 @property(nonatomic)BOOL   allowsEditing  ;  <

图像选取必须实现  UIImagePickerControllerDelegate协议,以监听选中的资源

info包含了许多数据,通过UIImagePickerControllerEditedImage读取编辑后的图像,通过UIImagePickerControllerOriginalImage读取源图像

          -(void)imagePickerController:(UIImagePickerController *)pickerdidFinishPickingMediaWithInfo:(NSDictionary *)info; <

取消选取       - (void) imagePickerControllerDidCancel:(UIImagePickerController *)picker;  <

NSString ---- 保存时需要自定字符串编码

UIImage ---- 注意UIImage无法写入文件,需要使用NSData数据类型进行中转,NSData可以将任何类型的文件,以二进制格式存储

NSData *data = UIImagePNGRepresentation(image);   <   生成图像数据

------------------------------UIImagePickerController-------------------------------------------------------------------------------

添加两个协议:UINavigationControllerDelegate, UIImagePickerControllerDelegate  

UIImagePickerController *imagePicker = [[UIImagePickerController alloc]init];    实例化照片选择器

[imagePicker setAllowsEditing:YES];  设置属性

[imagePicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];  <

[imagePicker setDelegate:self];  <

[self presentViewController:imagePicker animated:YES completion:nil];  <

#pragma mark   UIImageViewPicker 代理方法

- (void)imagePickerController:(UIImagePickerController *):(NSDictionary *)info   

{  

  UIImage *image = info[@"UIImagePickerControllerEditorImage"];

  [_imageView setImage:image];

  [picker dismissViewControllerAnimated:YES completion:nil];

}

----------------------------------------------------------------------------------------------------------------------------------------

看到autoreleasing描述符,需要实例化一个指针,并且传入指针的地址

NSString *error = nil;

NSString *string = [NSString stringWithContentsOfFile:strPath  encoding:NSUTF8StringEncoding error:&error];

NSLog(@"string %@", string);

-------------------------------------归档和恢复------------------------------------------------------------------

NSString、NSDictionary、NSArray、NSData、NSNumber等类型的对象,可以直接用NSKeyedArchiver进行归档和恢复

不是所有的对象都可以直接用这种方法进行谷底昂,只有遵守了NSCoding协议的对象才可以

NSCoding协议方法:

encodeWithCoder:       每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例对象,可以使用encodeObject:forKey:方法归档实例变量

initWithCoder:   每次从文件中回复对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey:方法解码实例变量

[NSKeyedArchiver archiveRootObject:  toFile:  ]会首先调用被归档类的encodeWithCoder方法对该类的属性编码,然后再写入文件进行归档

[NSKeyedUnarchiver unarchiveObjectWithFile: path]从文件加载数据侯,会调用类的initWithCoder方法对该类的属性回复

原文地址:https://www.cnblogs.com/fsliu/p/4250547.html