今天终于有空调试之前碰到但未解决的一个问题。问题是这样的:使用http将一个视频文件(mp4格式)下载到documents目录下,拿到这个路径,ios4.3sdk下,iphone模拟器上播放失败,提示:this movie could not be played.,在真机上(iphone,ipad,系统均为4.3)可以正常播放。由于项目时间比较紧加上真机上测试通过,所以没当这是一回事。事隔几天后,xcode和真机都升级到最新的ios5。这次在模拟器上跑同一个程序,同样是无法播放,这次提示是:the operation could not be completed.在真机(系统为ios5.0)上测试,同样报相同的错误,不过这次是中文的:操作不能完成。百思不得其解。期间尝试过禁用ios5的ARC(Automatic Reference Counting),这样修改的原因是由于有文章介绍说ios5的ARC会自动释放对象,所以导致一些莫名其妙的错误。搞了半天,解决没找到禁用ARC的设置,后来发现只有使用xcode4.2创建的工程才有Automatic Reference Counting这个选项,旧版本创建的工程是找不到这项设置的,默认值是为no的。

此路不通,再换一条路继续尝试。根据错误提示,搜索到一篇文章,大意也是说ios4下正常播放的文件在ios5下无法播放。文章提到解决办法为使用NSURL对象作为路径读取文件而不是NSString对象作为路径参数。(使用函数为[NSData dataWithContentsOfFile:tempFilePath];将tempFilePath从NSString改为NSURL)。看完这篇文章后,想想自己程序也是使用NSURL读取文件,并且在最初的时候也遇到过问题,无法打开视频,当时的解决办法是对路径进行编码,在创建NSURL对象。代码如下:

[[NSURLalloc]initWithString:[moviePath stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]];

这段代码在ios4的真机上运行完全没有问题,但在模拟器(ios4,ios5)和ios5的真机上却不正常了。

于是锁定目标,重点在NSURL上着手,找到一篇文章,是介绍通过NSURL访问本地文件,里面的代码打开文件是使用这样的代码的:

NSURL* url = [NSURL fileURLWithPath:Path];

在完全没头绪的情况下,只能啥都试试了。将这段代码替换已有的代码,这时候奇迹出现了,之前碰到的所有问题在一瞬间全部解决了。

法克+雪特!!!就这么简单。看看输出的路径是这样的:file://localhost/...,想想这样应该才是正确的路径,跟读取程序资源包里文件显示的路径是一个方式的。这时候只能责怪自己学艺不精,对函数没有真正的了解。被其实不是问题的问题困扰了好久,该好好反思了。不能只为做项目而熟悉代码,而是要从为了解代码而去做项目。

这是一个惨痛的教训啊,用一两个小时加上被蚊子无限次攻击这些血淋淋的代价换来了这个bug的解决。

附两个api函数的区别:

+ (id)URLWithString:(NSString *)URLString

Parameters

URLString

The string with which to initialize the NSURL object. Must be a URL that conforms to RFC 2396. This method parses URLString according to RFCs 1738 and 1808. (To create NSURL objects for file system paths, usefileURLWithPath:isDirectory: instead.)

+ (id)fileURLWithPath:(NSString *)path

Parameters

path

The path that the NSURL object will represent. path should be a valid system path. If path begins with a tilde, it must first be expanded with stringByExpandingTildeInPath. If path is a relative path, it is treated as being relative to the current working directory.

Passing nil for this parameter produces an exception.

惨痛的教训,NSURL访问本地文件的问题相关推荐

  1. Mac上使用nginx访问本地文件夹报403的问题

    Mac上使用nginx访问本地文件夹报403的问题 就是没有权限访问你配置的文件夹在 nginx.conf头行加入下面配置 user root wheel; 不过我的电脑在启动nginx访问的时候会发 ...

  2. 服务器读取本地文件,java远程服务器访问本地文件

    java远程服务器访问本地文件 内容精选 换一换 云服务器网络异常.防火墙未放行本地远程桌面端口.云服务器CPU负载过高等场景均可能导致云服务器无法正常登录.本节操作介绍无法登录Linux弹性云服务器 ...

  3. java访问文件服务器,java远程服务器访问本地文件

    java远程服务器访问本地文件 内容精选 换一换 云服务器网络异常.防火墙未放行本地远程桌面端口.云服务器CPU负载过高等场景均可能导致云服务器无法正常登录.本节操作介绍无法登录Linux弹性云服务器 ...

  4. 谷歌浏览器关闭跨域限制,允许跨域请求,设置允许访问本地文件

    1. 设置允许访问本地文件 只需要右键谷歌浏览器的快捷方式,查看属性,在目标一栏中空出一格然后加入字符串--allow-file-access-from-files,点击确定即可. 2. 允许跨域请求 ...

  5. 通过ip访问本地文件spring boot

    spring boot通过ip访问本地文件 方案一: 继承WebMvcConfigurerAdapter并重写addResourceHandlers方法(SpringBoot2.0及Spring 5. ...

  6. 解决谷歌访问本地文件和跨域问题

    解决谷歌访问本地文件和跨域问题(非代码) 一.解决不能访问本地文件问题 一般浏览器是不能通过load方法来加载本地文件的,那么我们可以右键点击属性. 然后将"–allow-file-acce ...

  7. 技术小白的第一篇博客 --- 虚拟机访问本地文件设置

    虚拟机访问本地文件夹 最近工作中需要使用到虚拟机在不同操作系统上测试软件,总是从服务器拷贝文件太麻烦,就找了一下虚拟机可以直接访问本地文件夹的设置方法,这里就是简单记录一下. 1.在虚拟机的设置页面中 ...

  8. flash不能访问本地文件

    flash出现"不能访问本地资源";解决方案 linux下,如果没有文件夹自行创建 在/home/{user}/.macromedia/Flash_Player/#Security ...

  9. java访问本地文件_详解Java读取本地文件并显示在JSP文件中

    详解Java读取本地文件并显示在JSP文件中 当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相 ...

最新文章

  1. 用Django内置form组件实现注册
  2. 微生物组:3分和30分文章差距在哪里?
  3. SQL的多种JOIN
  4. 产品经理学PMP,有必要吗?
  5. 从DUMP函数说开去
  6. C语言进制的格式字符,GB汉字文件转换成C语言Unicode十六进制字符串格式
  7. 实现 Virtual DOM 下的一个 VNode 节点
  8. Open-Set recognition会议记录
  9. 国庆期间新闻回顾:微软智斗盗版 华为出手3Com
  10. php 判断邮箱_php检测邮箱地址是否存在
  11. 银行专业术语解释说明 超级详细
  12. OMNet++ Tic Toc例程的解析1
  13. 阿里云 mysql 导出数据_mysql数据库导出数据库
  14. Cocos2d-x 中文标题设置
  15. ACM1880魔咒词典
  16. python 网络培训班费用具体是多少?
  17. P3265 [JLOI2015] 线性基
  18. UDP编程——TFPT(小文件传输)
  19. java对象转json格式化_Java对象转json JsonFormat注解
  20. X猜想:比尔离开后的微软帝国

热门文章

  1. PHP在Linux下的套件LNMP
  2. python Cookbook 学习笔记(一)
  3. 20V,24V转5V,20V,24V转3.3V降压芯片,IC介绍
  4. <Linux进程间通信方式-详细总结>
  5. Python 实现Prim最小生成树算法
  6. 带你深入理解传递参数
  7. 区块链和区块链联盟_我们当中关于区块链的寓言
  8. The Pragmatic Programmer 转载
  9. MFC单文档项目动态绘制十字线
  10. Caused by: java.lang.OutOfMemoryError: Compressed class space 什么问题