我正在尝试使用自定义类与Swift和CoreData作为可转换对象。 我已经浪费了几个小时试图弄清楚它,但是无法做到。 我不断收到两个错误:无法将属性标记为@NSManaged,因为其类型无法在Objective-C中表示,以及无法声明公共属性,因为其类型使用内部类型。
非常感谢您的帮助。谢谢。
我有一个名为User的CoreData对象。 我还有一个名为Site的对象。
我不希望Site对象成为CoreData对象,因为大多数情况下我创建Site对象时不想将其添加到CoreData上下文中。
下面您将看到类型为“Site”的“primarySite”和类型为“Site”的数组“sites”。这两行给出了我上面列出的两个错误。
数据模型 User+CoreDataClass
非常感谢您的帮助。谢谢。
我有一个名为User的CoreData对象。 我还有一个名为Site的对象。
我不希望Site对象成为CoreData对象,因为大多数情况下我创建Site对象时不想将其添加到CoreData上下文中。
下面您将看到类型为“Site”的“primarySite”和类型为“Site”的数组“sites”。这两行给出了我上面列出的两个错误。
数据模型 User+CoreDataClass
import Foundation
import CoreData
public class User: NSManagedObject {
}
User+CoreDataProperties
import Foundation
import CoreData
extension User {
@nonobjc public class func fetchRequest() -> NSFetchRequest<User> {
return NSFetchRequest<User>(entityName: "User");
}
@NSManaged public var firstName: String?
@NSManaged public var lastName: String?
@NSManaged public var role: String?
@NSManaged public var primarySite: Site
@NSManaged public var sites: [Site]
}
网站
import UIKit
class Site: NSCoding {
let identifier: Int32
let name: String
let note: String
init(with values: Dictionary<String,Any>) {
identifier = Int32(values["identifier"] as! String)!
name = values["name"] as! String
note = values["note"] as! String
}
required convenience init(coder decoder: NSCoder) {
var siteValues = [String:Any]()
siteValues["identifier"] = decoder.decodeObject(forKey: "identifier") as! String
siteValues["name"] = decoder.decodeObject(forKey: "name") as! String
siteValues["note"] = decoder.decodeObject(forKey: "note") as!
self.init(with: siteValues)
}
func encode(with coder: NSCoder) {
coder.encode(String(self.identifier), forKey: "identifier")
coder.encode(self.name, forKey: "name")
coder.encode(self.note, forKey: "note")
}
}
User
正在使用手动/无代码生成,并且你在User
上有一个扩展。User
类定义在哪里? - Tom Harrington