从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext

Posted

技术标签:

【中文标题】从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext【英文标题】:Cannot convert value of type String to specified type NSManagedObjectContext, While converting from Swift 2.3 -> 3.2 【发布时间】:2018-11-24 04:51:02 【问题描述】:

我需要帮助。从 Swift 2.3 -> 3.2 转换时,我收到以下错误。我无法解决此错误。

以下是我的编码资料,我遇到了一些问题。

Error1:无法将 String 类型的值转换为指定类型 NSManagedObjectContext**

错误 2:无法将类型 URL 的返回表达式转换为返回类型 URL。

 class func persistentFileURL(_ name: String, enclosingDirectoryName: String) -> Foundation.URL 
        let directoryURL = self.directoryForPersistentStorage(enclosingDirectoryName)
        let urlPath = directoryURL.path
        let filePath: NSManagedObjectContext = (urlPath as NSString).appendingPathComponent(name) //Error1 : Cannot convert value of type String to specified type NSManagedObjectContext 
        
        return URL(context: filePath) // Error2 : Cannot convert return expression of type URL to return type URL.
    

注意:URL 是单独的类声明来处理这个问题:URL_Class

请帮助我。我对 ios 很陌生。无法理解此类错误。

【问题讨论】:

【参考方案1】:

let filePath: NSManagedObjectContext = (urlPath as NSString).appendingPathComponent(name)

应该阅读

let filePath: String = (urlPath as NSString).appendingPathComponent(name)

【讨论】:

但仍有Error2【参考方案2】:

错误 2:

URL 没有任何使用context: 的构造函数。尝试使用 init(fileURLWithPath:) 代替(它需要一个字符串,因此您需要将 filePath 设为字符串的实例而不是 NSManagedObject)。

请参阅 Apple here 的 URL 上的官方文档。

编辑

当您返回一个自定义 URL 对象(NSManagedObject 的子类)时,您需要更改函数的返回类型。

-> Foundation.URL-> URL。我建议将您的自定义 URL 子类重命名为其他名称,因为此名称已被 Apple 使用,并且可能会导致一些命名空间问题(编译器会感到困惑并且您会收到错误)。

【讨论】:

请检查这个我有这个单独的 URL 类:i.stack.imgur.com/0VUYa.png 但是您的函数返回的是 Foundation.URL 的实例,而不是您的自定义 URL 类的实例。似乎您需要更改函数的返回类型。 @维杰 否,但为此创建了扩展,因此它可能不会给出命名空间错误。 扩展 URL NSManaged var baseURLArray: NSObject? NSManaged var selectedbaseURL:字符串? NSManaged var backendURLArray: NSObject? NSManaged var selectedbackendURL:字符串? NSManaged var authorizationKey: NSObject? NSManaged var selectedAuthorizationKey:字符串?

以上是关于从 Swift 2.3 -> 3.2 转换时,无法将 String 类型的值转换为指定类型 NSManagedObjectContext的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Xcode 8 并将语法从 swift 2.3 转换为 swift 3.0 后文件丢失警告

将 swift 2.3 转换为 swift 3 错误

转换为 swift 2.3 后模糊使用“下标”

转换为 swift 2.3 后模糊使用“下标”

如何在 Swift 2.3 中将 UInt8 转换为 Anyobject

从 swift 2.3 问题迁移到 swift 3.1