在我的应用中,我正在进行联系人的后台同步,当设备被锁定时,应用程序崩溃:
由于未捕获的异常终止应用' 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];
同步时设备被锁定时应用程序仍然崩溃。
有关如何解决此问题的任何想法?
答案 0 :(得分:1)
在特定条件下(例如设备锁定时)故意干扰数据保护。
默认保护级别是完全保护,其中文件已加密且在设备锁定时无法访问。您可以通过编程方式设置应用程序创建的文件的保护级别,如iOS应用程序编程指南中的使用磁盘加密保护数据中所述。对于存储在共享容器中的文件(在配置应用程序组中描述),请以编程方式设置保护级别。
此链接还会显示Xcode项目中启用数据保护的位置(具体而言,是目标的权利),如果您不确定它是否已启用。
如果您的应用程序需要数据保护的优势,但需要比全有或全无,您需要深入了解Apple文档副本中引用的“使用磁盘加密保护数据”部分