Realm Swift 2.0:“不允许操作”- 仅在设备上
Posted
技术标签:
【中文标题】Realm Swift 2.0:“不允许操作”- 仅在设备上【英文标题】:Realm Swift 2.0: "Operation not permitted" - only on device 【发布时间】:2015-09-07 15:43:39 【问题描述】:现在我正在从 Swift 1.2 迁移到 Swift 2.0。
我正在进行的项目使用 Realm 作为数据库。 Swift 1.2 在设备和模拟器上一切正常。但是在设备上运行应用程序时,我在 Swift 2.0 中遇到了这个错误:
fatal error: 'try!' expression unexpectedly raised an error: Error
Domain=io.realm Code=1 "open() failed: Operation not permitted"
UserInfo=0x145e2bc0 Error Code=1, NSLocalizedDescription=open() failed:
Operation not permitted: file /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-
700.0.57.3/src/swift/stdlib/public/core/ErrorType.swift, line 50
Realm 正在使用此基本路径进行初始化:
NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
.UserDomainMask, true).first!
即用户文档目录。我可以使用 NSFileManager 访问文件,并在那里实际看到 Realm 文件。
任何线索如何调试这个问题?似乎 Realm 只是在初始化时崩溃。
【问题讨论】:
【参考方案1】:如果您收到 open() failed
错误,通常情况下,这意味着您提供的路径在某些方面仍然无效。
在这种情况下,我猜您可能没有指定您希望在该 Documents 路径中创建的 Realm 文件的实际文件名。在设置 Realm 文件的路径时(无论是默认路径还是新路径),您必须确保路径是绝对路径,包括文件名。
【讨论】:
你非常接近实际的解决方案:问题是NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
在 Swift 1.2 中返回了以 /
结尾的路径,并在 Swift 2.0 中开始返回而不结束 /
。在路径中添加/
解决了这个问题:let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
let realmPath = "\(documentsDirectory)/database.realm"
哦,酷!很高兴听到!嗯,如果这只是需要考虑斜杠的情况,我完全建议在这里使用NSString
中的stringByAppendingPathComponent
方法,因为它可以自动解释这些。 :) 祝你好运!
提醒 stringByAppendingPathComponent
已被弃用,继续使用 NSURL。例如,NSURL(string:NSTemporaryDirectory())!.URLByAppendingPathComponent("yourrealm.realm").absoluteString
啊,这可以解释为什么我在任何 Swift 文档中都找不到它。感谢您的提醒!以上是关于Realm Swift 2.0:“不允许操作”- 仅在设备上的主要内容,如果未能解决你的问题,请参考以下文章
带有 Realm 3.4.0 的 .Net Standard 2.0“无法解析引用”Xamarin 表单