【问题标题】:Unable to open realm at path when device is locked设备锁定时无法在路径上打开领域
【发布时间】:2017-11-06 19:46:43
【问题描述】:

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

由于未捕获的异常“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];

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

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 在 Xcode 目标权利中,您是否打开了数据保护? developer.apple.com/library/content/documentation/IDEs/…
  • 是的,已开启!
  • 我关闭它后,没有发生崩溃。感谢@BradBrighton 提供的信息
  • 不客气。我将在答案中发表评论,以便可以关闭问题。很高兴它有帮助!
  • @Teja Nandamuri 在你的场景中你能解释一下你是如何复制崩溃的吗?我看到崩溃,但我不知道要复制它们,请你帮忙。

标签: ios objective-c realm


【解决方案1】:

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

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

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

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

如果您的应用需要数据保护的好处,但比全有或全无,您需要深入研究 Apple 文档副本中引用的“使用磁盘加密保护数据”部分.

【讨论】:

  • 有谁知道如何复制这个崩溃,如果有人能用例子解释他们的崩溃场景会真的很有帮助。
猜你喜欢
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多