iPhone:不需要icloud备份时将用户数据保存在哪里

Posted

技术标签:

【中文标题】iPhone:不需要icloud备份时将用户数据保存在哪里【英文标题】:iPhone:Where to save the users data when icloud back up is not required 【发布时间】:2012-01-03 12:34:19 【问题描述】:

您好,我即将向 App Store 提交我的应用程序。我了解到,随着 iCloud 存储的引入,苹果数据存储指南几乎没有变化。由于文档目录的内容,我将所有用户的数据保存在应用程序文档目录中自动备份到 iCould,如果启用,我正在考虑将它们移动到应用程序库目录。考虑到苹果的数据存储准则,是否批准将内容保存到库中?如果不保存数据在哪里?请帮忙。

【问题讨论】:

【参考方案1】:

您有两个主要选择:

将您的文件放在缓存目录中,然后它们不会被备份,Apple 也不会拒绝您的应用程序。但是,当 ios 5 空间不足时,它可能会删除其中的所有文件 将文件放入 Documents 中,但对其进行标记以便不备份。有一个关于如何执行此操作的技术说明 (QA1719)。这仅适用于 iOS 5.0.1 及更高版本

【讨论】:

【参考方案2】:

您可以将数据放在 Documents 文件夹中,但在保存在 Documents 文件夹中之前,请在 Documents 文件夹中创建一个文件夹,假设为 temp。然后编写以下代码不备份到 iCloud。

[[NSFileManager defaultManager] createDirectoryAtPath:temp 
                          withIntermediateDirectories:NO
                                           attributes:nil
                                                error:nil];
NSURL *dbURLPath = [NSURL URLWithString:temp];
[self addSkipBackupAttributeToItemAtURL:dbURLPath]; 

同样实现方法addSkipBackupAttributeToItemAtURL 不要忘记包括

#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;

【讨论】:

以上是关于iPhone:不需要icloud备份时将用户数据保存在哪里的主要内容,如果未能解决你的问题,请参考以下文章

如果关闭并删除iPhone上所有的备份记录会发生啥?因为我的备份空间不足了,如何把以前备份的数据

iOS7 Core Data 和 iCloud 作为备份。用户的观点

将完整的 CoreData 上传(备份)到 iCloud Drive 并在需要时恢复

苹果手机突然出现激活

如何在不将其备份到 iCloud 的情况下为我的应用程序提供演示数据?

备份联系人示例代码或来自 iPhone 的示例