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

由于未捕获的异常“RLMException”而终止应用程序,原因:
'/ var / mobile /容器/数据/应用程序/FF77C6DA-970E-4FDD-AB69-C10C20607243/Documents/MyApp/default.realm.lock:
无法在路径上打开领域
'/ var / mobile /容器/数据/应用程序/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文件,并将文件保护设置为None。连同NSFilePosixPermissions
[[NSFileManager defaultManager] setAttributes:@{NSFileProtectionKey: NSFileProtectionNone,
                                                    NSFilePosixPermissions : [NSNumber numberWithShort:0777]
                                                    }
                                     ofItemAtPath:[[[RLMRealm defaultRealm]configuration]fileURL].URLByDeletingLastPathComponent.path error:nil];

当设备在同步时被锁定时,应用仍然崩溃。

有想法该怎么解决这个吗 ?

最佳答案

故意将数据保护设置为在某些情况下(例如设备锁定时)会干扰访问。

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

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

如果您不确定是否启用了数据保护,此链接还将显示在Xcode项目中启用了Data Protection的位置(特别是目标的权利)。

如果您的应用程序需要数据保护的好处,但要比全有或没有的粒度更细,则需要深入研究Apple文档副本中引用的“使用磁盘加密保护数据”部分。

关于ios - 设备锁定时无法在路径上打开 Realm ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47144604/

10-10 03:44