当前位置: 首页 > 知识库问答 >
问题:

领域文件的快速复制-不工作

南宫正阳
2023-03-14

Swift版本3。

我正在着手将我的realm.default文件复制到我的应用程序中,如果它不存在的话,这样我就可以将它打包为发行版的一部分。该文件需要是可变的,所以我将其复制到文档目录。

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

下面是我的应用程序委托加载领域文件的代码:

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={nsSourceFilePatherRokey=/users/username/library/developer/CoreSimulator/devices/4965D609-499A-4AE5-8ECC-3266DAE4BA87/Data/containers/bundle/application/b324E72E-2B5A-4A02-bc2C-fb542FDA6957/appname.app/default.realm,nsUserStringVariant=(Copy),

有人对此有什么想法吗。至少存在直到用户/username/library/developer/coresimulator/devices/4965d609-499a-4ae5-8ecc-3266dae4ba87/data/containers/bundle/application/b324e72e-2b5a-4a02-bc2c-fb542fda6957/appname.app/的路径,然后文件就包含在包中。

共有1个答案

陆仲渊
2023-03-14

因为您混淆了pathurlrealm.configuration.defaultconfiguration.fileURL返回URL的实例。bundle.main.path()返回字符串的实例。url的字符串表示形式与path不同。

例如。

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

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

所以您应该使用其中之一(路径或URL)。如果使用path,请使用defaultRealmPath.path代替string(描述: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)")
    }
}

如果使用URL,则bundle.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)")
    }
}
 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 如何在Python中复制文件? (17个答案) 5年前关闭。 使用Windows File Explorer或Mac’s Finder将文件复制到常规右键单击复制>右键单击粘贴的时间至少要长3倍。有没有比Python更快的替代方法?可以采取什么措施来加快文件复制过程?(文件目标位于网络驱动器上……如果有任何区别……)。 编辑后: 这是我最终得到的结果:

  • 3.6 ABP领域层 - 领域事件 在C#中,一个类可以定义其专属的事件并且其它类可以注册该事件并监听,当事件被触发时可以获得事件通知。这对于对于桌面应用程序或独立的Windows Service来说非常有用。但是, 对于Web应用程序来说会有点问题,因为对象是根据请求(request)被创建并且它们的生命周期都很短暂。我们很难注册其它类别的事件。同样地,直接注册其它类别的事件也造成了类之间的耦合

  • 如何使用嵌入式iframe方法解决跨域问题?意思是我有域A和域B,并想在域B上嵌入域A,以绕过同源策略?一个详细的例子将是伟大的!

  • 3.5 ABP领域层 - 工作单元 3.5.1 简介 连接和事务管理是使用数据库的应用程序最重要的概念之一。当你开启一个数据库连接,什么时候开始事务,如何释放连接;诸如此类的…。ABP默认使用 工作单元 来管理数据库连接和事务。 3.5.2 在ABP中管理连接和事务 当 进入 某个 事务单元 的时候,ABP 会 打开 数据库的连接,并开始 事务 操作(它可能不会立即打开,但是会在首次使用数据库的时

  • 3.4 ABP领域层 - 领域服务 3.4.1 简介 领域服务(或者服务,在DDD模式中)是被用来执行领域操作或者业务规则的。Eric Evans 在他的DDD书中这样说过:一个好的Service应该有以下三个特征: 与领域概念相关的操作不是Entity或Value Object 的一个自然部分; 接口是根据领域模型的其它元素定义的; 操作是无状态的。 领域服务和Application Servi

  • 我有一个项目,我正在通过GSON和Volley阅读一些json。我想把我的数据保存在数据库中,我希望Realm是一个好的解决方案。我选择了我的第一个类,它有七个成员变量,所有的Strings和int,并让它扩展RealmObject,并将其中一个int确定为主键。它编译得很好,但是当它运行时,我在日志中得到大量的输出,最终应用程序在显示主要活动之前就崩溃了。GSON似乎不喜欢解析扩展了RealmO