gpt4 book ai didi

ios - 您如何判断 Assets URL 是否实际指向现有 Assets ?

转载 作者:可可西里 更新时间:2023-11-01 04:40:22 30 4
gpt4 key购买 nike

基本问题:如果您有一个 Assets URL 并希望检索该 Assets 的图像,您如何实际验证该 Assets 是否确实存在?请参阅下面我的完整解释以了解详细信息我是说。

我有一个正在开发的应用程序,允许用户将图像分组为“包”以进行进一步处理。这些图像可以来自 iTunes 共享、设备的相机(如果已连接)或设备的照片库。此外,用户可以以一些基本方式编辑图像。 “捆绑”可以长期存在;它们在应用程序停止和启动时被序列化和反序列化,因此应用程序的状态在运行之间保持不变。

我的原始设计将图像保存到应用程序的沙箱中。如果执行任何编辑,图像将被简单地重写到它的本地文件中。但是,如果一个包中包含大量图像,这可能会导致不必要的图像内容重复,从而导致“文件系统”的使用不尽如人意。

我的重新设计现在有了它,如果图像来自 Assets 库,我只需存储 Assets 的 URL,并在需要实际显示图像或其内容时检索它。当用户编辑图像时,它会被写入本地沙箱,就像我最初的设计一样。我的应用程序跟踪图像是来自本地文件系统还是 Assets 库。

当我的应用程序未激活时,我的问题就出现了。用户完全可以进入照片应用程序并随意删除图像——包括我的应用程序存储了 URL 指针的图像。

我做了一个“如果呢?”测试一下,看看如果用户做这样的事情,我的应用程序会发生什么。我看到的情况有点出乎意料。我编写了一个处理包列表的处理程序,使用以下代码验证所有具有 Assets 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.
}
}];

在我的测试中,我从未到达失败 block 。 Apple 的文档说“如果用户拒绝访问应用程序,或者如果没有应用程序被允许访问数据,则会调用失败 block 。”它没有说明当 URL 不访问时会发生什么存在。事实上,我的测试显示某些东西正在写入一条 NSLog() 消息,“无法找到具有 UUID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX 的 Assets ”(XXX 被原始 URL 中的 UUID 替换)。不过,这还不够糟糕。我仍然可以在屏幕上的 View Controller 上看到 UIImageView 中的图像,并且当我将 View Controller 弹出到父级时,我得到了系统重置。

那么,我的问题是,有什么方法可以判断 Assets URL 是否确实存在?我不介意是否必须删除图像(毕竟,用户是删除图像的人!)。我不喜欢有一些已知的行为路径会持续导致设备重启的想法;我无法向 App Store 提交具有此行为的应用程序。

有什么建议吗?在等待答案的同时,我仍将对一些想法进行自己的测试,但我可以使用人们就此给我的任何建议。

谢谢!

最佳答案

我遇到了类似的问题 - 在 resultBlocked 中,我检查了 Assets 参数是否为 nil - 如果它为 nil,则 Assets 未找到。

关于ios - 您如何判断 Assets URL 是否实际指向现有 Assets ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9548909/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com