我有一个我正在开发的应用程序,允许用户将图像分组为“捆绑”以进行进一步处理.图像可以来自iTunes共享,设备的相机(如果已连接)或设备的照片库.此外,用户可以以某些基本方式编辑图像. “捆绑”可以长寿;它们在应用程序停止和启动时被序列化和反序列化,因此应用程序的状态在运行之间是持久的.
我的原始设计将图像保存到应用程序的沙箱中.如果执行任何编辑,则只需将图像重写为其本地文件.但是,如果一个包包含大量图像,这可能导致图像内容的不必要的重复,导致不太理想的“文件系统”使用.
我的重新设计现在有它,所以如果一个图像来自资产库,我只存储资产的URL,并在我需要实际显示图像或其内容时检索它.当用户编辑图像时,它将被写入本地沙箱,就像在我的原始设计中一样.我的应用程序跟踪图像是来自本地文件系统还是资产库.
当我的应用程序不活动时,我的问题出现了.用户完全可以进入照片应用程序并随意删除图像 – 包括我的应用程序存储了URL指针的图像.
我做了“怎么办?”测试看看如果用户要做这样的事情会在我的应用程序中发生什么.我看到发生的事情有点意外.我编写了一个处理程序包,它遍历包列表,使用以下代码验证所有具有资产URL的图像:
[assetlibrary assetForURL:url resultBlock:^(ALAsset *asset) { _image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]]; // ... everything works! } failureBlock:^(NSError *error) { NSLog(@"Asset verify Failed"); if (_image != nil) { // I already have a reference to the UIImage... write it locally } else { // Image is nil and we have an empty image. } }];
在我的测试中,我从未到达故障块. Apple的文档说“如果用户拒绝访问应用程序,或者如果不允许应用程序访问数据,则会调用失败块.”它没有说明当URL不存在时会发生什么.实际上,我的测试显示正在编写一条NSLog()消息“无法找到UUID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX的资产”(XXX被原始URL中的UUID替换).但这还不够糟糕.我仍然可以在屏幕上的VIEw Controller上看到UIImageVIEw中的图像,当我将视图控制器d出到父控件时,我会重置系统.
所以,我的问题是,有没有办法判断资产网址是否确实存在?我不介意我是否必须删除图像(毕竟,用户是删除图像的用户!).我不喜欢有一些已知的行为路径会导致设备重启;我无法将具有此行为的应用程序提交到App Store.
有什么建议?虽然我在等待答案,但我仍然会对自己的一些想法进行测试,但我可以使用人们可以给我的任何建议.
谢谢!
解决方法 我遇到了类似的问题 – 在resultBlocked中我检查了资产参数为nil – 如果它是nil则找不到资产. 总结以上是内存溢出为你收集整理的ios – 如何判断资产URL是否实际指向现有资产?全部内容,希望文章能够帮你解决ios – 如何判断资产URL是否实际指向现有资产?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)