属性不能被标记为@NSManaged,因为它的类型不能在 Objective-C 中表示
Posted
技术标签:
【中文标题】属性不能被标记为@NSManaged,因为它的类型不能在 Objective-C 中表示【英文标题】:Property cannot be marked @NSManaged because its type cannot be represented in Objective-C 【发布时间】:2018-12-22 00:23:18 【问题描述】:我正在尝试将自定义类保存到核心数据中,但它在生成的 NSManagedSubClass 中的 @NSManaged public var deck: [card]?
上给了我这个错误。谁能指出我正确的方向?
extension Deck
@nonobjc public class func fetchRequest() -> NSFetchRequest<Deck>
return NSFetchRequest<Deck>(entityName: "Deck")
@NSManaged public var deck: [card]?
@NSManaged public var name: String?
【问题讨论】:
【参考方案1】: @NSManaged public var deck: [card]?
这行代码的card
是一个自定义类,你不能在你的NSManagedObject中使用它作为数据类型。
解决方案是让 Card 成为 NSObject 的子类:
class Card: NSObject
【讨论】:
谢谢这有效,但现在我在保存上下文时收到“无法识别的选择器发送到实例”错误,知道这是什么意思吗? 这里是代码 - let addedDeck = Deck(context: context) addedDeck.name = deckNameInput.text addedDeck.deck = cardArray ad.saveContext() “ad”是指“let addedDeck = Deck(context: context)”吗?你把“addDeck”写错了“ad”吗?我认为问题在于对象“ad”没有 saveContext() 方法。 没有抱歉的广告是我将上下文保存到应用委托的快捷方式 让 ad = UIApplication.shared.delegate 为! AppDelegate let context = ad.persistentContainer.viewContext以上是关于属性不能被标记为@NSManaged,因为它的类型不能在 Objective-C 中表示的主要内容,如果未能解决你的问题,请参考以下文章
Xcode NSManagedObject 子类在它们被标记为非可选时包含可选
在 Core Data 中,NSManaged 对象上的 URI 属性类型应该用于啥?
NSManaged Object Context 无法删除对象