NSURLIsExcludedFromBackupKey在iOS 8上不起作用

时间:2015-03-17 21:01:45

标签: ios objective-c icloud

我使用标准方法从备份中排除:

+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL
{
    assert([[NSFileManager defaultManager] fileExistsAtPath:[URL path]]);

    NSError *error = nil;
    BOOL success = [URL setResourceValue:@(YES)
                                  forKey:NSURLIsExcludedFromBackupKey error:&error];
    if (!success) {
        NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
    }

    return success;
} 

正如有些人建议我在 [NSURL fileURLWithPath:path] 中使用此方法,但它不起作用:

从备份中排除groups.xml时出错Error Domain = NSCocoaErrorDomain Code = 513“Неудалосьзавершитьоперацию。(Cocoa,ошибка513)”

UserInfo = 0x170272ac0 {

NSURL = file:///private/var/mobile/Containers/Bundle/Application/59286088-C226-4653-A84F-A4B5D40C11DE/anatomyfree.app/groups.xml,NSFilePath = / private / var / mobile / Containers / Bundle / Application / 59286088-C226-4653-A84F-A4B5D40C11DE / anatomyfree.app / groups.xml,NSUnderlyingError = 0x1702492a0“Неудалосьзавершитьоперацию。不允许操作” }

此文件存在。它被解析但不能从备份中排除。这是什么原因?

我使用iOS 8.2,iPhone 6,ru语言环境。

这是方法调用:

NSString *path = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
NSURL *url = [NSURL fileURLWithPath:path];
[Utilities addSkipBackupAttributeToItemAtURL:url];

4 个答案:

答案 0 :(得分:1)

在NSURL * url = [NSURL fileURLWithPath:path]之前添加此代码

if([[UIDevice currentDevice] systemVersion] floatValue] >= 8.0f){
    path = [NSString stringWithFormat:@"./%@",path];
}

答案 1 :(得分:1)

我在使用时遇到了问题:

pDirURL.setValue(true , forKey: NSURLIsExcludedFromBackupKey)

哪个工作正常。有一天它开始抛出NSUnknownKeyException,原因不明。现在我用

try pDirURL.setResourceValue(true, forKey: NSURLIsExcludedFromBackupKey)

再次正常工作!

答案 2 :(得分:0)

试试这个,它在iOS 8中完美适用于我:

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/%@.%@", documentsPath, fileName, extension]];
[Utilities addSkipBackupAttributeToItemAtURL:url];

答案 3 :(得分:0)

它无法正常工作的原因是因为您的资源文件随您的应用程序(软件包)一起提供,该应用程序不会在用户的iCloud中进行备份。

您的应用程序包中的资源永远不会被写入,这就是任何写入/修改操作失败的原因。

如果您真的想使用iCloud备份,则需要先将文件复制到PHP Parse error: imagepng(): gd-png error: cannot allocate libpng main struct 这样的目录中。