2012-06-13 17 views
4

我的应用程序被拒绝了,因为我使用Documents目录来存储从服务器下载的一些文件。如何知道文件是否会在iCloud中备份?

我已经从苹果的文档readed这样的:https://developer.apple.com/library/ios/#qa/qa1719/_index.html我发现这个代码:addSkipBackupAttributeToItemAtURL -> NSString parameter?

我读也,此代码将是有益的iOS版本> = 5.0.1。并且iOS版本< 5不使用iCloud来备份用户数据。但是,iOS == 5.0使用iCloud来备份数据,但标志dosn't工作。

所以,我有两个问题:

首先,我需要在我的应用程序文件的工作(如数据库)。如果我将这些文件存储在Caches目录中,只要iOS需要删除我的文件。所以我保存我的文件在Documents目录,即:

/Documents/db.db 
/Documents/my.plist 

后,我在我的文件存储在该目录中我打电话了,我把该目录中的所有文件的方法addSkipBackupAttributeToItemAtURL。但我不知道如何测试这是否是方法正在工作。

我在这里iOS 5.0.1 : How to verify that the folder is marked as "Do not back up" for iCloud? readed,如果我用模拟器我可以到应用程序的目录,并运行此命令

​​3210

知道,如果该文件已被标记为不能进行备份。

但是,如果我运行在命令行我为每一个文件这种结果的命令:

XATTR:my.plist:没有这样的XATTR:com.apple.MobileBackup

所以,第一个问题是:我怎么能确定我的Documents目录下的文件被正确标记为不被备份。我不想再将我的应用程序上传到AppStore,并且苹果的用户再次将其丢弃。

其次,我的应用程序在iOS 5中运行。我不想检查每个文件,如果用户有iOS 5.0并将其存储在Caches目录中,并且每次需要使用该文件时检查那里有“剧照”。我有一个500MB的数据库,我不能每次都下载。

所以,第二个问题是:如果在“iOS部署目标”中我选择5.1并且在Build Settings> Base SDK中我也选择5.1这意味着用户使用iOS版本< 5.1不会下载我的应用程序, ?因此,我不需要担心用iOS 5.0的用户带走我的数据,对吧?

回答

1

如果你的目标是> = 5.1的iOS下面的代码会帮助你。使用以下方法排除在iCloud上备份的项目。你甚至可以使用此代码排除整个文件夹

- (BOOL)addSkipBackupAttributeToItemAtPath:(NSString *)filePathString { 
     NSURL *fileURL = 
     [NSURL fileURLWithPath:filePathString]; 

     assert([[NSFileManager defaultManager] 
     fileExistsAtPath: [fileURL path]]); 

     NSError *error = nil; 

     BOOL success = [fileURL setResourceValue:[NSNumber numberWithBool:YES] 
             forKey:NSURLIsExcludedFromBackupKey 
            error:&error]; 
     return success; 
    } 
2

我相信答案很简单:不要使用documents目录。

如果您不使用文档目录,也不要乱用iCloud配置,则不会备份该数据。

我相信你可以使用库文件夹上回答这个问题描述:How can I get a writable path on the iPhone?

编辑:回答这个评论,我是错误的假设,只有文档中的数据进行备份,根据苹果的文档在http://developer.apple.com/library/ios/DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/PerformanceTuning/PerformanceTuning.html,但我仍然认为库文件夹是非备份数据库的最佳位置。

但是,你应该设定一个不备份标志为同一文件中解释,使用setResourceValue:forKey:错误:方法。

这不是文件上清楚如何才能不上的iOS版本== 5.0备份数据,除非你愿意重新删除缓存数据(这我相信你不这样做,所以你的问题)。

如果不是一个问题,锁定您的应用程序只能在iOS 5.1工作或以上(设置你的应用程序上最小的iOS版本上工作了XCode,记得清洗你的整个构建和再建的话)。

+0

所以如果我存储我的图书馆目录中的文件也不会被backep起来,它也不会受到每当它想的iOS被删除?我相信在这里说什么:http://stackoverflow.com/questions/9743977/ios-is-backing-up-28-0kb-of-some-unknown-data-from-my-app-to-icloud“ 1可接受的投票 \t 事实证明,预编译的Google Analytics库在/ Library目录中保留了一个名为googleanalytics.sql的小型数据库,一旦我发现这一点,我将该标志设置为“不备份”文件和它的工作:我得到0kb备份。“库目录正在备份。 – FreelanceAr

+0

我编辑了答案。你是对的。感谢您的注意。 –

相关问题