核心数据迁移问题:无法启动storePath

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了核心数据迁移问题:无法启动storePath相关的知识,希望对你有一定的参考价值。

我试图将一些核心数据代码从swift 2迁移到swift 4.代码如下:

///  Removes the existing model store specfied by the receiver.
///
///  - returns: A tuple value containing a boolean to indicate success and an error object if an error occurred.
public func removeExistingModelStore() -> (success: Bool, error: NSError?) {
    var error: NSError?
    let fileManager = FileManager.default

    if let storePath = storeURL.path {
        if fileManager.fileExists(atPath: storePath) {
            let success: Bool
            do {
                try fileManager.removeItem(at: storeURL)
                success = true
            } catch let error1 as NSError {
                error = error1
                success = false
            }
            if !success {
                print("*** (String(describing: CoreDataModel.self)) ERROR: [(#line)] (#function) Could not remove model store at url: (String(describing: error))")
            }
            return (success, error)
        }
    }

    return (false, nil)
}

构建错误说“条件绑定的初始化程序必须具有可选类型,而不是'字符串'”。所以我用谷歌搜索并遵循建议删除可选绑定:

let storePath = storeURL.path { ... }

然后它在上面的位置有两个新错误:1。不能调用非函数类型'String'的值; 2.在其自己的初始值内使用的变量

我相信上面的代码主要是用于设置/拆卸核心数据模型的样板代码。我是初学者所以请帮忙!

答案

如果你从if中删除了if let,那么你也必须删除{ },你可以试试

public func removeExistingModelStore() -> (success: Bool, error: Error?) {

    if FileManager.default.fileExists(atPath: storeURL.path ) {

        do {
            try FileManager.default.removeItem(at: storeURL)
             return (true, nil) 
        } catch {

            return (false, error)  
        }

     } 

    return (false, nil)
}

以上是关于核心数据迁移问题:无法启动storePath的主要内容,如果未能解决你的问题,请参考以下文章

如何进行核心数据迁移?

核心数据迁移启动需要多长时间?

核心数据版本控制(轻量级迁移)问题

使用拆分核心数据模型进行迁移

为啥添加单个实体后我的核心数据需要很长时间才能保存?

ASP - 在启动时核心迁移 EF Core SQL DB