从 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 后文件丢失警告