从备份中排除 ApplicationSupportDirectory 时出错

Posted

技术标签:

【中文标题】从备份中排除 ApplicationSupportDirectory 时出错【英文标题】:Error excluding ApplicationSupportDirectory from Backup 【发布时间】:2014-05-01 12:59:54 【问题描述】:

我的应用程序被拒绝,因为它向 iCloud 备份了太多数据。

为了解决这个问题,我必须将我的所有文件放在一个新目录中,该目录位于 ApplicationSupportDirectory 中。 到目前为止我还没有做到这一点,我无法弄清楚似乎是什么问题。

这是我目前的代码:

AppDelegate.m 类:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:
(NSDictionary *)launchOptions


NSString* string = [[self applicationDocumentsDirectory] absoluteString];

if (![[NSFileManager defaultManager] fileExistsAtPath:string  isDirectory:NULL]) 
    NSError *error = nil;
    [[NSFileManager defaultManager] createDirectoryAtPath:string 
withIntermediateDirectories:YES attributes:nil error:&error];
    if (error)
        NSLog(@"I'm not even making your stupid dir");
    

[self addSkipBackupAttributeToItemAtURL:[self applicationDocumentsDirectory]];
return YES;


- (NSURL *)applicationDocumentsDirectory


NSString *appSupportDir =   
[NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask,  
YES) lastObject];
appSupportDir = [appSupportDir stringByAppendingPathComponent:@"MyAppDirectory"];
NSLog(appSupportDir);
return [NSURL URLWithString:appSupportDir];


- (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL


// assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);

NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
                              forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success)
    NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);

return success;

但最后,我得到一个错误: [1535:60b] 从备份 (null) 中排除 (null) 时出错;

我有什么遗漏吗? 首先,困扰我的是 - 是否有任何代码行我应该写甚至告诉我希望我的所有方面都在那个特定的文件夹中,我以后想跳过备份? 如果我应该这样做,我应该在哪里? AppDelegate.m 还是其他地方?

AppDevelopment 的这一部分是我以前从未接触过的,所以我真的迷失了。

【问题讨论】:

【参考方案1】:

您似乎没有在任何地方创建目录。在调用 addSkipBackupAttributeToItemAtURL 之前添加一个验证目录是否存在并在需要时创建它。

    if (![[NSFileManager defaultManager] fileExistsAtPath:[self applicationDocumentsDirectory] isDirectory:NULL]) 
            NSError *error = nil;        
            [[NSFileManager defaultManager] createDirectoryAtPath:[self applicationDocumentsDirectory] withIntermediateDirectories:YES attributes:nil error:&error];
            if (error)
                 //Something went wrong
            
    

【讨论】:

它以 //出了问题结束。我编辑了我的问题,以便在我按照您的建议进行操作后,您可以看到我的代码是什么样子 @Stebra 添加日志以查看问题所在:NSLog(@"%@",error); Error Domain=NSCocoaErrorDomain Code=512 "操作无法完成。(Cocoa 错误 512.)" 据我所知,这意味着他正在制作一个已经存在的文件夹..但是如果它存在,为什么我不能稍后将它从备份中排除?!

以上是关于从备份中排除 ApplicationSupportDirectory 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何从备份中排除附加到 EC2 实例的某些 EBS 卷?

text 痛苦构建的rsync交换机和排除项从本地驱动器备份到SMB共享。

如何打开mac application support路径

我可以用“不备份”属性标记文档目录吗?

DBA:这有一份对接NBU备份故障排除指南,请查收!

mysqldump 备份导出数据排除某张表