我正在尝试用Coredata实现Codable。我试着遵循下面的答案,但仍然没有成功。
How to use swift 4 Codable in Core Data?
我遇到的错误/问题是我的项目一直在说:“每当我尝试编码或解码对象时,参数类型'User‘不符合预期的类型'Encodable’。
我已经在CoreData中创建了实体,并创建了NSManagedObject子类:
import Foundation
import CoreData
@objc(User)
public class User: NSManagedObject, Codable {
// MARK: - Codable setUp
enum CodingKeys: String, CodingKey {
case fullname
case email
case zipcode
case usertype = "user_type"
}
// MARK: - Decoding the data
required convenience init(from decoder: Decoder) {
guard let context = decoder.userInfo[.context] as? NSManagedObjectContext else {NSLog("Error: with User context!")
return
}
guard let entity = NSEntityDescription.entity(forEntityName: "User", in: context) else {
NSLog("Error with user enity!")
return
}
self.init(entity: entity, in: context)
let values = try decoder.container(keyedBy: CodingKeys.self)
fullname = try values.decode(String.self, forkey: .fullname)
email = try values.decode(String.self, forkey: .email)
zipcode = try values.decode(String.self, forkey: .zipcode)
userType = try values.decode(String.self, forkey: .userType)
}
// MARK: - Encoding the data
func encode(to encoder: Encoder) throws {
var container = try encoder.container(keyedBy: CodingKeys.self)
try container.encode(fullname, forkey: .fullname)
try container.encode(email, forkey: .email)
try container.encode(usertype, forkey: .usertype)
try container.encode(zipcode, forkey: .zipcode)
}
}
// This helps with decoding
extension CodingUserInfoKey {
static let context = CodingUserInfoKey(rawValue: "context")
}当我尝试解码对象并将用户保存到firebase时,我得到一个警告:“在参数类型'User.Type‘中,' user’不符合预期的类型'Decodable‘”

当我尝试编码时,我得到一个警告,说“参数类型'User‘不符合预期的类型'Encodable’”

发布于 2018-03-03 18:37:02
可解码的
用户“不符合预期类型”
由于输入错误而发生(区分大小写):
case usertype ...与...forKey: .userType)
并且encode/decode(:forKey:)方法有一个大写的K
发布于 2018-03-05 17:34:46
您的问题可能与CoreData/Codable无关,而是与导入的用户模型有关,该用户模型实际上不符合Codable。
Firebase在它们的FirebaseAuth.framework (Reference)中定义了一个User。如果您在文件的顶部执行import Firebase,它也会导入该用户声明。这是Firebase设计的糟糕的应用程序接口,因为许多也使用FirebaseAuth的应用程序在某些时候会有一个带有一些自定义属性的用户模型。
如果你在该文件中不需要FirebaseAuth,只需导入更具体的Firebase框架,例如import FirebaseDatabase,以避免导入他们的用户模型。
否则,为了帮助编译器选择您的用户模型而不是导入的模型,您可以显式地在User.self前面加上您的模块名:YourModule.User.self。
https://stackoverflow.com/questions/49078853
复制相似问题