高级 Cocoa 类别 - 捕获所有文件访问 - iOS

发布于 2024-10-11 19:12:20 字数 394 浏览 3 评论 0原文

嘿伙计们, 在我的应用程序中,我需要在通过某些文件访问方法(UIImage imageNamed、Cocos2d CCSprite 方法等)访问该文件之前验证该文件是否确实存在于设备上。

我需要确保该文件位于设备上(如果没有,请尝试从服务器获取它)。 我可以在不更改所有代码来支持它的情况下做到这一点吗? 我想到了文件系统上的“超级类别”之类的东西...... 是否可以???

我看到这个想法,你觉得怎么样 overriding-methods-in-cocoa-without-subclassing

谢谢! M。

Hey Guys,
In my app i need to verify that the file actually exist on the device before its being accessed by some file access methods (UIImage imageNamed, Cocos2d CCSprite method and so on).

I need to be sure that the file is on the device (and if not try to fetch it from the servers).
Can I do it without changing all the code to support it?
I thought on something like a 'Super Category' on the file system...
Is it possible???

I saw this idea, what do you think
overriding-methods-in-cocoa-without-subclassing

Thanks!
M.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝天 2024-10-18 19:12:20

通常最好尝试文件/url 读取并优雅地失败 - 文件系统有一种改变的方式。

如果您知道图像的包,则使用 NSBundle。

it's often best to attempt the file/url read and fail gracefully - filesystems have a way of changing.

if you know the image's bundle, then use NSBundle.

何其悲哀 2024-10-18 19:12:20

您可以使用 NSFileManager fileExistsAtPath: 但来自文档:

/* 以下方法的用途有限。尝试根据文件系统的当前状态或文件系统上的特定文件来预测行为会在面对文件系统竞争条件时鼓励奇怪的行为。尝试一个操作(例如加载文件或创建目录)并优雅地处理错误比尝试提前确定操作是否会成功要好得多。

所以可能只是尝试获取资源,如果失败,则获取然后重试。

You could use NSFileManager fileExistsAtPath: but from the docs:

/* The following methods are of limited utility. Attempting to predicate behavior based on the current state of the filesystem or a particular file on the filesystem is encouraging odd behavior in the face of filesystem race conditions. It's far better to attempt an operation (like loading a file or creating a directory) and handle the error gracefully than it is to try to figure out ahead of time whether the operation will succeed.

So probably just try to get the resource, if it fails, fetch and then retry.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文