属性不能被标记为@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 中表示的主要内容,如果未能解决你的问题,请参考以下文章

存储的属性需要一个初始值或者应该是@NSManaged

Xcode NSManagedObject 子类在它们被标记为非可选时包含可选

在 Core Data 中,NSManaged 对象上的 URI 属性类型应该用于啥?

NSManaged Object Context 无法删除对象

“NameOfProperty”不能用作实体类型“NameOfType”的属性,因为它被配置为导航

对象存储