在NSDocumentDirectory上禁用数据备份时CFURLSetResourcePropertyForKey失败

我正试图下载图像文件并存储在NSDocumentDirectory 。 为了做到这一点,我必须closuresiCloud和iTunes上的数据备份。 以下是我的代码:

 +(void)saveData:(NSData*)thedata:(NSString*)fileName { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *localFilePath = [documentsDirectory stringByAppendingPathComponent:fileName]; NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager createFileAtPath:localFilePath contents:thedata attributes:nil]; //prevent files from backup on iCloud or iTune NSURL *fileURL = [NSURL URLWithString:localFilePath]; [self addSkipBackupAttributeToItemAtURL:fileURL]; } 

和我的addskipbackupattributetoitematurl:

 +(BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)fileURL { if (![[NSFileManager defaultManager] fileExistsAtPath:[fileURL path]]) { NSLog(@"File %@ doesn't exist!",[fileURL path]); return NO; } NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; if ([currSysVer isEqualToString:@"5.0.1"]) { const char* filePath = [[fileURL path] fileSystemRepresentation]; const char* attrName = "com.apple.MobileBackup"; u_int8_t attrValue = 1; int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0); NSLog(@"Excluded '%@' from backup",fileURL); return result == 0; } else if (&NSURLIsExcludedFromBackupKey) { NSError *error = nil; BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; if (result == NO) { NSLog(@"Error excluding '%@' from backup. Error: %@",fileURL, error); return NO; } else { NSLog(@"Excluded '%@' from backup",fileURL); return YES; } } else { return YES; } } 

但是BOOL result = [fileURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&error]; 创build了以下消息

CFURLSetResourcePropertyForKey失败,因为它传递了这个没有scheme的URL:/var/mobile/Applications/CF69D567-1D37-4053-BFA8-5D0FCBD9C2B2/Documents/coffee.jpg

我只是想知道是否有遇到这个问题?

解决了。 一旦我改变了

 NSURL *fileURL = [NSURL URLWithString:localFilePath]; 

 NSURL *fileURL = [NSURL fileURLWithPath:localFilePath]; 

一切工作完美。

Swift

 let fileURL = URL(fileURLWithPath: somepath)