问题描述
由于我如何在iPhone上保存一些下载的文件,我正在与应用拒绝作斗争.
I am battling with an app rejection due to how I am saving some downloaded files on the iPhone.
我已经实现了NSURLIsExcludedFromBackupKey
,但不清楚是否正确执行了该操作.我应该将NSURLIsExcludedFromBackupKey
应用于代表服务器上文件的NSURL,还是以某种方式将其应用于保存文件的iPhone上的目录?
I have implemented NSURLIsExcludedFromBackupKey
but I am not clear if I am doing it correctly. Should I be applying NSURLIsExcludedFromBackupKey
to the NSURL that represents the file on my server, or do I somehow apply it to the directory on the iPhone where I am saving the file?
在拒绝应用程序之后,这是我现在创建的内容:
Here is what I have created now, after the app was rejected:
// 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://www.myserver.com/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
}
推荐答案
下面是我最终对其进行编码以使其获得批准的方式.这可能有点矫kill过正,但比花一个月的时间确切猜测如何获得批准要好.
Here is how I ended up coding it so that it got approved. It is probably a little overkill, but better than spending an month trying to guess exactly how to get it approved.
// 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://www.myserver.com/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或目录URL?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!