从Backup中排除ApplicationSupportDirectory时出错

时间:2014-05-01 12:59:55

标签: ios app-store nsdocumentdirectory

我的应用程序被拒绝了,因为它备份了太多数据给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 个答案:

答案 0 :(得分:0)

好像你没有在任何地方创建你的目录。在调用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
            }
    }