在我的应用程序中,我正在进行联系人的后台同步,并且当设备锁定时,应用程序崩溃:
由于未捕获的异常“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/