• 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方法对该类的属性回复

  • 相关阅读:
    NOIP2010 关押罪犯
    NOIP2010 乌龟棋
    static属性
    数组的拷贝
    数组在类中的声明与创建
    两个数组之间的引用
    java数组实现买彩票(二个一维数组的比较思想)
    java数组实现买彩票(通过标识符进行判断的思想)
    java数组实现买彩票(重复则重新遍历查询思想)
    java数组实现买彩票(平移覆盖思想)
  • 原文地址:https://www.cnblogs.com/fsliu/p/4250547.html
Copyright © 2020-2023  润新知