最近做的项目中要存储一组图片数据,图片带有name,date等属性,处理办法是讲image图片直接存在沙盒documents文件中,再使用plist文件存储图片属性和image路径。

存入图片:

  1. - (void)savePhotos:(NSArray *)photos {
  2.  
  3. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  4. NSString *plistPath = [[paths objectAtIndex:] stringByAppendingPathComponent:@"photo_info.plist"];
  5. NSString *filePath = [[paths objectAtIndex:] stringByAppendingPathComponent:@"Image"];
  6. NSLog(@"%@", filePath);
  7.  
  8. NSFileManager* fileManager = [NSFileManager defaultManager];
  9. if (![fileManager fileExistsAtPath:plistPath]) {
  10. [fileManager createFileAtPath:plistPath contents:nil attributes:nil];
  11. }
  12. if (![fileManager fileExistsAtPath:filePath]) {
  13. [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];
  14. }
  15.  
  16. NSMutableArray *savePhotos = [[NSMutableArray alloc] init];
  17.  
  18. for (Photo *photo in photos) {
  19. NSMutableDictionary *info = [[NSMutableDictionary alloc]init];
  20.  
  21. NSString *imagePath = [filePath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpg", photo.name]];
  22. [UIImagePNGRepresentation(photo.image)writeToFile:imagePath atomically:YES];
  23. [info setObject:imagePath forKey:@"ImagePath"];
  24. [info setObject:photo.name forKey:@"Name"];
  25. [info setObject:photo.tags forKey:@"Tags"];
  26. [info setObject:photo.date forKey:@"Date"];
  27.  
  28. [savePhotos addObject:info];
  29. }
  30. [savePhotos writeToFile:plistPath atomically:YES];
  31. }

读取图片:

  1. - (NSArray *)loadPhotosFromDisk {
  2. //从本地读取图片
  3. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  4. NSString *plistPath = [[paths objectAtIndex:] stringByAppendingPathComponent:@"photo_info.plist"];
  5.  
  6. NSArray *photosArr = [NSArray arrayWithContentsOfFile:plistPath];
  7. for (NSDictionary *dic in photosArr) {
  8. Photo *photo = [[Photo alloc] init];
  9. photo.image = [UIImage imageWithContentsOfFile:[dic valueForKey:@"ImagePath"]];
  10. photo.name = [dic valueForKey:@"Name"];
  11. photo.tags = [dic valueForKey:@"Tags"];
  12. photo.date = [dic valueForKey:@"Date"];
  13. [self.photos addObject:photo];
  14. }
  15.  
  16. return self.photos;
  17. }

iOS笔记之文件读写的更多相关文章

  1. iOS数据持久化文件读写之偏好设置

    很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能.每个应用都有个NSUserDefaults实例,通过它来存取偏好设置.比如, ...

  2. Cocos2d-x在win32,android和IOS下的文件读写问题

    最近在学习和使用Cocos2d-x框架,虽然说的是跨平台,但是在用VS进行开发,然后移植到android或IOS下,也可能会出现各种问题,需要做细微的调整. 例如我在做文件读写操作的时候,很可能在wi ...

  3. 转载-Python学习笔记之文件读写

    Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...

  4. 【java学习笔记】文件读写(IO流)

    1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...

  5. C语言笔记 10_文件读写&预处理器

    文件读写 上一章我们讲解了 C 语言处理的标准输入和输出设备.本章我们将介绍 C 程序员如何创建.打开.关闭文本文件或二进制文件. 一个文件,无论它是文本文件还是二进制文件,都是代表了一系列的字节.C ...

  6. Python学习笔记九-文件读写

    1,读取文件: f=open('目录','读写模式',encoding='gbk,error='egiong') 后三项可以不写但是默认是' r'读模式:open函数打开的文件对象会自动加上read( ...

  7. python学习笔记 IO 文件读写

    读写文件是最常见的IO操作.python内置了读写文件的函数. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统完成的,现代操作系统不允许普通的程序直接对磁盘进行操作,所以, 读写 ...

  8. hadoop笔记-hdfs文件读写

    概念 文件系统 磁盘进行读写的最小单位:数据块,文件系统构建于磁盘之上,文件系统的块大小是磁盘块的整数倍. 文件系统块一般为几千字节,磁盘块一般512字节. hdfs的block.pocket.chu ...

  9. java笔记----property文件读写

    package com.test.property; import java.io.BufferedInputStream; import java.io.File; import java.io.F ...

随机推荐

  1. python sort、sorted高级排序技巧(转)

    add by zhj: 没找到原文.可以按多个维度进行排序,而且可以指定他们的排序方向,如果维度都是数字,排序比较容易,用+/-号就可以 指定排序方向.否则,就调用多次sorted进行排序了,而且要按 ...

  2. [GDAL]编译64位GDAL1.10

    环境VS2010,swigwin-2.0.11 1. 打开nmake.opt文件,找到SWIG=swig.exe这一句,假如没有将swig的目录添加到环境变量中,那么将这句后面的swig.exe修改为 ...

  3. OPENSSL编程 (secure shell, ssh)

    很好的 OPENSSL编程 教程,名字就叫“OPENSSL编程” 它里面还有很多关于密码学的东西. http://www.pengshuo.me http://www.pengshuo.me/2014 ...

  4. cocos代码研究(24)Widget子类PageView学习笔记

    理论基础 PageView类又称Layout的管理器,可以让用户在多个Layout之间左右或者上下切换显示,继承自 Layout . 代码实践 static PageView * create ()创 ...

  5. hdu 5185 动态规划 分析降低复杂度

    这题说的是 x[1]+x[2]+x[3]+…+x[n]=n, 这里 0 <= x[i] <= n && 1 <= i <= n x[i] <= x[i+1 ...

  6. python 封装时间常用操作方法-time,datetime

    封装脚本: #encoding=utf-8import timefrom datetime import timedelta,date def date_time_chinese():    prin ...

  7. 日志处理(二) 日志组件logback的介绍及配置使用方法(转)

    本文转自:http://www.cnblogs.com/yuanermen/archive/2012/02/13/2348942.html http://www.cnblogs.com/yuanerm ...

  8. HDU1087

    /*记忆化dfs+dp,因为每次最多走k步,所以上下左右的方向有所扩展, dp[i][j]存的是从dp[i][j]出发能吃的最大个数*/ #include<stdio.h> #includ ...

  9. INNODB索引与算法

    在之前的博文中简单提到了索引的分类与索引的可选择性查看:Click HERE 这片博客主要包含内容:索引组织表,索引算法B+树简单介绍 索引组织表 在innodb存储引擎中,表都是根据主键顺序组织存放 ...

  10. Java实现获取属性文件的参数值

    Java实现获取属性文件的参数值 1,属性文件内容(analysis.properties),路径必须在:src根目录下: #client data path analysis.client.data ...