NSFileManager在初始化文件的时候一不留神就进入陷阱
今天调试一个程序,内容是在手机一个本地路径生成一个缓存文件,在生成本地路径的时候犯了一个错误,本着求原因的精神调试了2个小时,终于找到原因了
刚开始断点调试的时候,执行到第13行,这里死活不给写入数据,一直返回NO,看着我都蛋碎了,后来看到打印出来的路径在Library下,想着是不是这里不
允许用户在这里创建数据缓存,果然把2行的 NSDocumentationDirectory 改成 NSDocumentDirectory,之后路径就变成了:
file:///var/mobile/Applications/79D7DD73-74C5-4ECE-BEF7-5988560A8AC2/Documents/436783070;在这个Documents/路径下用户是可以创建自己的文件,而在 Library/Documentation/路径下是不允许用户写入文件..这里作为本地临时文件储存是要使用 NSDocumentDirectory而不是 NSDocumentationDirectory...
修改前:
-(NSURL *)uniqueDocumentURL{
NSArray *documentDictiories = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentationDirectory inDomains:NSUserDomainMask];//注意这里的NSDocumentationDirectory
NSString * unique = [NSString stringWithFormat:@"%.0f",floor([NSDate timeIntervalSinceReferenceDate])];
id URLObject = [documentDictiories firstObject] ;
return [URLObject URLByAppendingPathComponent:unique];
}
-(NSURL *)imageURL{
if (!_imageURL && self.image) {
NSURL * url = [self uniqueDocumentURL];
if (url) {
NSData * imageData = UIImageJPEGRepresentation(self.image, 1.0);
if ([imageData writeToURL:url atomically:YES]) {//问题
_imageURL = url;
}
}
}
return _imageURL;
}
//控制台打印
Printing description of url:
file:///var/mobile/Applications/16614FF0-B641-4938-8BF8-91658759D4D8/Library/Documentation/436783128
修改后:
- (NSURL *)uniqueDocumentURL
{
NSArray *documentDirectories = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSString *unique = [NSString stringWithFormat:@"%.0f", floor([NSDate timeIntervalSinceReferenceDate])];
return [[documentDirectories firstObject] URLByAppendingPathComponent:unique];
} - (void)setImage:(UIImage *)image
{
self.imageView.image = image; // when image is changed, we must delete files we've created (if any)
[[NSFileManager defaultManager] removeItemAtURL:_imageURL error:NULL];
[[NSFileManager defaultManager] removeItemAtURL:_thumbnailURL error:NULL];
self.imageURL = nil;
self.thumbnailURL = nil;
} Printing description of url:
file:///var/mobile/Applications/79D7DD73-74C5-4ECE-BEF7-5988560A8AC2/Documents/436783070
NSFileManager在初始化文件的时候一不留神就进入陷阱的更多相关文章
- smarty初始化文件
为了smarty初始化文件能方便其他目录下的脚步包含使用,应该将初始化文件里的引入smarty类及其他路径设置为全局路径,而不是相对路径 另外,如果模板里有文件的路径的引用,一定要是相对PHP脚本文件 ...
- [C++基础]一个比较常用的配置文件/初始化文件读取程序
在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...
- 实现经常使用的配置文件/初始化文件读取的一个C程序
在编程中,我们常常会遇到一些配置文件或初始化文件. 这些文件通常后缀名为.ini或者.conf.能够直接用记事本打开.里面会存储一些程序參数,在程序中直接读取使用.比如,计算机与server通信.se ...
- php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event
php加了命名空间没引入初始化文件:类的命名空间要与文件夹名一致namespace Business\Event;缺少了Event
- linux环境: shell初始化文件, for TCSH, CSH
TCSHELL, CSHELL 配置文件 全局配置文件 /etc/csh.cshrc个人配置文件 ~/.cshrc或~/.tcshrc 参考: 1.配置你的csh/tcsh, https://wik ...
- linux(十)之初始化文件
前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...
- CodeWarrior 10 配置Jlint初始化文件
新建一个项目之后,飞思卡尔的仿真器的配置不如德州仪器那么简单.他需要一些配置. 当我们新建一个工程后,可以采取如下步骤配置Jlint: 1.右击工程名,选择属性. 2.在Run/Debug Setti ...
- oracle数据库丢失数据文件、控制文件、重做日志文件、初始化文件恢复方法
rman target/ list backup; 查看是否已备份,如果没有,那就不知道了 模拟故障,删除/u01/app/oracle/oradata/ORCL文件夹下的所有文件 sqlplus ...
- 实现常用的配置文件/初始化文件读取的一个C程序
在编程中,我们经常会遇到一些配置文件或初始化文件.这些文件通常后缀名为.ini或者.conf,可以直接用记事本打开.里面会存储一些程序参数,在程序中直接读取使用.例如,计算机与服务器通信,服务器的ip ...
随机推荐
- mybatis 动态sql语句(1)
mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类: 1. if 语句 (简单的条件判断) 2. ...
- 数据校验(2)--demo1---bai
input_score.jsp <%@ page language="java" import="java.util.*" pageEncoding=&q ...
- C Primer Plus学习笔记(三)- 字符串和格式化输入/输出
从一个简单的例子开始 #include <stdio.h> int main() { char name[10]; printf("Input Your Name:\n" ...
- Solaris10怎么创建flash archive
使用flarcreate命令可以创建Solaris操作系统的映像(flash archive).Flash archive相当于Solaris系统的克隆.使用flash archive可以用于安装新系 ...
- 清空select标签中option选项的4种不同方式
转自:https://blog.csdn.net/pt_sm/article/details/53521560 方法一 document.getElementById("selectid&q ...
- 【Android 多媒体应用】使用MediaCodec将摄像头采集的视频编码为h264
MainActivity.java import android.app.Activity; import android.graphics.ImageFormat; import android.h ...
- ListView显示Sqlite的数据美化版与性能优化
在上一篇文章中,我们已经实现在listview显示数据库内容的.但是我们listview中,排版不是很好看,所以这篇文章呢,我们来对listveiw进行美化.哈哈,说白了,就是对listview添加一 ...
- springboot启动异常java.lang.NoSuchFieldError: DEFAULT_INCOMPATIBLE_IMPROVEMENTS
解决办法一 yml或者Properties文件中配置 spring.freemarker.check-template-location=false 解决办法二 @SpringBootApplicat ...
- UAC(User Agent Client) 和 UAS(User Agent Server)
SIP协议采用Client/Server模型.每一个请求(Request)触发服务器的一个操作:每个操作被称为方法(Method):每个请求除了指明具体方法外,还携带了一系列的头域(Header fi ...
- JAVA中几个修饰符的作用以及一些相关话题
几个传统的修饰符: public 该类的子类,以及同包,或者其他情况下可以访问该修饰符修饰的方法/变量 protacted 只有同包,子类,该类本身可以访问 private 只有该类自身能访问 无修饰 ...