iOS – 将整个Document目录标记为不备份

我的申请被苹果拒绝,原因是:

2.23:应用程序必须遵循iOS数据存储指南,否则将被拒绝

那么是否有可能将整个Document目录标记为不做备份? 我的应用程序在iOS 6.1和更高版本中运行。

我熟悉这个代码,但是我不知道用它来标记我的Document目录

- (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; } 

编辑:

苹果已经告诉我,iCloud从图片库备份我的照片,我像这样加载图片的图像:

 - (void)setupPageScroll { NSString *imgCount; int i; [_scrollView setContentSize:CGSizeMake(_scrollView.frame.size.width * _pageControl.numberOfPages, _scrollView.frame.size.height)]; _scrollView.delegate = self; for (i = 0 ; i < 10 ; i++) { imgCount = [NSString stringWithFormat:@"%@%d.jpg",_gallName , i]; [self createPageWithImage:[UIImage imageNamed:imgCount] forPage:i]; } } - (void)createPageWithImage:(UIImage *)images forPage:(int)page { UIView *newView = [[UIView alloc] initWithFrame: CGRectMake(_scrollView.frame.size.width * page, 0, _scrollView.frame.size.width, _scrollView.frame.size.height)]; UIImageView *tempImage = [[UIImageView alloc]initWithImage:images]; [tempImage setContentMode:UIViewContentModeScaleAspectFit]; tempImage.frame = _galleryView.frame; _imgGallery = tempImage; [newView addSubview: _imgGallery]; [_scrollView addSubview: newView]; } - (IBAction)pageChanged:(id)sender { CGRect pageRect = CGRectMake(_pageControl.currentPage * _scrollView.frame.size.width, 0, _scrollView.frame.size.width, _scrollView.frame.size.height); [_scrollView scrollRectToVisible: pageRect animated: YES]; } 

如何跳过这些图像?

…最后,我的申请已被批准。 只要按照这个指示:

把这个代码放在appDelegate.m(didFinishLunching)

 NSString *docsDir; NSArray *dirPaths; NSURL * finalURL; dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); docsDir = [dirPaths objectAtIndex:0]; finalURL = [NSURL fileURLWithPath:docsDir]; [self addSkipBackupAttributeToItemAtURL:finalURL]; 

并跳过备份:

 - (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; } 

您可以标记为无备份只有父文件夹,而不是每个文件。 但它不应该是一个Documents目录,因为它应该只包含用户创build的内容。 您应该使用库/应用程序支持 ( 技术问答QA1719 )

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES); NSString *directory = [paths objectAtIndex:0]; directory = [directory stringByAppendingPathComponent:@"MyData"]; NSFileManager *fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:directory] == NO) { NSError *error; if ([fileManager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:&error] == NO) { NSLog(@"Error: Unable to create directory: %@", error); } NSURL *url = [NSURL fileURLWithPath:directory]; // exclude downloads from iCloud backup if ([url setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error] == NO) { NSLog(@"Error: Unable to exclude directory from backup: %@", error); } } 

积分: xinsight博客