设备锁定时无法在路径中打开域

时间:2017-11-06 19:46:43

标签: ios objective-c realm

在我的应用中,我正在进行联系人的后台同步,当设备被锁定时,应用程序崩溃:

  

由于未捕获的异常终止应用' RLMException',原因:   ' /var/mobile/Containers/Data/Application/FF77C6DA-970E-4FDD-AB69-C10C20607243/Documents/MyApp/default.realm.lock:   无法在路径上打开领域   ' /var/mobile/Containers/Data/Application/FF77C6DA-970E-4FDD-AB69-C10C20607243/Documents/MyApp/default.realm.lock' ;:   open()失败:不允许操作。'

我试过了:

创建新文件夹:

NSError *error;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"/MyApp"];

if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
    [[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:YES attributes:nil error:&error]; //Create folder

然后在此文件夹中创建.realm文件,并将文件保护设置为“无”。以及NSFilePosixPermissions

[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey: NSFileProtectionNone,
                                                    NSFilePosixPermissions : [NSNumber numberWithShort:0777]
                                                    }
                                     ofItemAtPath:[[[RLMRealm defaultRealm]configuration]fileURL].URLByDeletingLastPathComponent.path error:nil];

同步时设备被锁定时应用程序仍然崩溃。

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

在特定条件下(例如设备锁定时)故意干扰数据保护。

  

默认保护级别是完全保护,其中文件已加密且在设备锁定时无法访问。您可以通过编程方式设置应用程序创建的文件的保护级别,如iOS应用程序编程指南中的使用磁盘加密保护数据中所述。对于存储在共享容器中的文件(在配置应用程序组中描述),请以编程方式设置保护级别。

(来自https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html

此链接还会显示Xcode项目中启用数据保护的位置(具体而言,是目标的权利),如果您不确定它是否已启用。

如果您的应用程序需要数据保护的优势,但需要比全有或全无,您需要深入了解Apple文档副本中引用的“使用磁盘加密保护数据”部分