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

Posted

技术标签:

【中文标题】核心数据迁移问题:storePath无法启动【英文标题】:core data migration issue: storePath cannot be initiated 【发布时间】:2019-02-18 15:40:10 【问题描述】:

我尝试将一些核心数据代码从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.变量在自己的初始值内使用

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

【问题讨论】:

【参考方案1】:

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

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无法启动的主要内容,如果未能解决你的问题,请参考以下文章

如何进行核心数据迁移?

核心数据迁移:无法将“NSManagedObject_MyType”类型的值转换为“MyModule.MyType”

QSqlDatabase-SQLite无法在开机自启动时加载数据?

Virtualbox虚机无法启动因断电

以前的核心数据迁移失败

ActiveMQ挂了,重启一直无法将所有实例启起来的问题