gpt4 book ai didi

Realm 文件的快速副本 - 不工作

转载 作者:搜寻专家 更新时间:2023-11-01 07:19:59 24 4
gpt4 key购买 nike

Swift 版本 3。

如果我的 realm.default 文件不存在,我正在努力在启动时将其复制到我的应用程序中,以便我可以将其打包为分发的一部分。该文件需要可变,因此我将其复制到文档目录。

不幸的是,我得到一个文件不存在的错误。我已验证路径正确,并且 .app 中包含该文件。

话虽如此,该文件有一个白色圆圈,上面有一条线(不要输入类型),并说当我尝试打开它时,我无法在这种 mac 上打开它。我可以通过选择 show package contents 来查看内容,文件包含在其中。

上面的文字..

以下是我的 App Delegate 加载 Realm 文件的代码:

func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
}

func openRealm() {

let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!
let bundleReamPath = Bundle.main.path(forResource: "default", ofType:"realm")

if !FileManager.default.fileExists(atPath: String(describing: defaultRealmPath)) {
do
{
try FileManager.default.copyItem(atPath: bundleReamPath!, toPath: String(describing: defaultRealmPath))
}
catch let error as NSError {
// Catch fires here, with an NSError being thrown
print("error occurred, here are the details:\n \(error)")
}
}
}

以下是错误消息(粗体显示上下文):

发生错误,详情如下: Error Domain=NSCocoaErrorDomain Code=4 “文件“default.realm”不存在。” UserInfo={NSSourceFilePathErrorKey=/Users/用户名/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Bundle/Application/B324E72E-2B5A-4A02-BC2C-FB542FDA6957/AppName .app/default.realm, NSUserStringVariant=( 复制), NSDestinationFilePath=file:///Users/username/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Data/Application/565716DD-E903-409F-B7C8-20154B0DF6BA/Documents/default.realm, NSFilePath=/Users/username/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Bundle/Application/B324E72E-2B5A-4A02-BC2C-FB542FDA6957/AppName. app/default.realm, NSUnderlyingError=0x618000241bc0 {Error Domain=NSPOSIXErrorDomain Code=2 “没有这样的文件或目录”}}

任何人对此有任何想法。至少,路径一直到 Users/username/Library/Developer/CoreSimulator/Devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/data/Containers/Bundle/Application/B324E72E-2B5A-4A02-BC2C-FB542FDA6957/AppName.app/存在,然后文件包含在包中。

最佳答案

因为您混淆了 pathURLRealm.Configuration.defaultConfiguration.fileURL 返回 URL 的实例。 Bundle.main.path() 返回 String 的实例。 URL 的字符串表示与 path 不同。

例如

print(String(describing: defaultRealmPath))
// => file:///Users/.../Documents/default.realm

print(defaultRealmPath.path)
// => /Users/.../Documents/default.realm

因此您应该使用其中之一(路径或 URL)。如果您使用 path,请使用 defaultRealmPath.path 而不是 String(describing: defaultRealmPath),如下所示:

let defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!
let bundleReamPath = Bundle.main.path(forResource: "default", ofType:"realm")

if !FileManager.default.fileExists(atPath: defaultRealmPath.path) {
do
{
try FileManager.default.copyItem(atPath: bundleReamPath!, toPath: defaultRealmPath.path)
}
catch let error as NSError {
// Catch fires here, with an NSError being thrown
print("error occurred, here are the details:\n \(error)")
}
}

如果您使用 URLBundle.main.url() 代替 Bundle main.path(): 让 defaultRealmPath = Realm.Configuration.defaultConfiguration.fileURL!

let bundleReamPath = Bundle.main.url(forResource: "default", withExtension:"realm")!

if !FileManager.default.fileExists(atPath: defaultRealmPath.path) {
do
{
try FileManager.default.copyItem(at: bundleReamPath, to: defaultRealmPath)
}
catch let error as NSError {
// Catch fires here, with an NSError being thrown
print("error occurred, here are the details:\n \(error)")
}
}

关于 Realm 文件的快速副本 - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com