gpt4 book ai didi

ios - Swift 和 CoreData 使用自定义类作为可转换对象

转载 作者:行者123 更新时间:2023-12-01 19:41:46 25 4
gpt4 key购买 nike

我正在尝试使用带有 swift 和 CoreData 的自定义类作为可转换对象。我一直在浪费时间试图弄清楚但无法解决。我不断收到两个错误:无法将属性标记为 @NSManaged,因为其类型无法在 Objective-C 中表示,并且无法将属性声明为 public,因为其类型使用内部类型。
非常感谢您的帮助。谢谢。

我有一个名为 User 的 CoreData 对象。我还有一个名为 Site 的对象。
我不希望 Site 对象成为 CoreData 对象,因为大多数时候我创建 Site 对象时都不希望将其添加到 CoreData 上下文中。

下面您将看到“Site”类型的“primarySite”和“sites”,它是“Site”类型的数组。这两行给出了我上面列出的相同的两个错误。

数据模型 Data Model

用户+CoreDataClass

import Foundation
import CoreData

public class User: NSManagedObject {
}

用户+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")
}
}

最佳答案

我想出了如何解决这两个错误。

1) “属性不能被标记为@NSManaged,因为它的类型不能在 Objective-C 中表示”
感谢@Tom 的回答,我通过将 Site 设为 NSObject 的子类来解决此错误。

class Site: NSObject, NSCoding {


2) “属性不能声明为 public,因为其类型使用内部类型”
我通过在类以及编码器和解码器函数之前添加“public”来解决此错误。

public class Site: NSObject, NSCoding {
...
public func encode(with coder: NSCoder) {...}
public required convenience init(coder decoder: NSCoder) {...}

关于ios - Swift 和 CoreData 使用自定义类作为可转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com