Documents下存储文件被拒解决方法(文件存储策略应对)

苹果在iOS 5系统时,对app的文件存储提出了新的要求。从它的guildline来看,是推荐开发者尽量把app生成的文件放在Caches目录下的。原文如下:

照做会怎么样?

如果这么做的话,会出现两种情况

  1. 如果对此置之不理,继续把应用生成的文件放在Documents目录下,那么这些文件会被备份到iTunes或者iCloud。如果这些文件很大,那么用户可能需要为了同步消耗不少流量,然后苹果可能会因此拒绝你的应用上架,这是一个悲剧。
  2. 如果开发者照Apple说的干,把应用生成的文件放在Caches目录下,那么苹果不会拒绝你的应用,很happy。但是iOS 5会在磁盘空间紧张的时候删除Caches目录下的文件,这对用户来说可能是一个更大的悲剧。

如何应对新的文件存储策略?

开发者在这时陷入了两难的境地,但是到了iOS 5.0.1的时候,开发者多了第三种选择:

  • 继续把文件存储在Documents目录下,但是标记这些文件为不需要备份。详情请参考 technote (QA1719)

代码示例

给文件加上\”do not back up\”属性的代码如下,需要注意这个是iOS 5.0.1才有效,低于这个版本就别费劲了。

在appdelegate中添加以下代码,注意引用

#include <sys/xattr.h>
- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    const char* filePath = [[URL path] fileSystemRepresentation];
 
    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;
 
    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);
    return result == 0;
}
在Document下创建文件或者文件夹时调用以上方法:

[self addSkipBackupAttributeToItemAtURL:[NSURL URLWithString:[文件路径 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值