【发布时间】:2015-02-27 09:37:33
【问题描述】:
我正在为我的第一个 Core Data 应用程序而苦苦挣扎,并且没有最顺畅的旅程 :o(
我有一个绘图应用程序,它有一个名为 DrawingObject 的基类,它是 NSManagedObject 的子类,并且有两个属性:
@NSManaged var frameAsValue: NSValue
var frame: NSRect
DrawingObject 有一个子类 DrawingRectangle。都有相应的实体,并设置了完全限定的类名。 frameAsValue 属性被标记为可变形,而 frame 被标记为未定义瞬态。问题是我在创建 DrawingRectangle 时遇到 frameAsValue 属性无法识别的选择器错误。
我已经看到将 NSRect 转换为字符串以将其保存到 Core Data 的建议,但这似乎容易出错(本地化)和 hackish(如果这是一个正确的词;o)。这是 DrawingObject 的代码:
class DrawingObject: NSManagedObject {
@NSManaged var frameAsValue: NSValue
var frame: NSRect = NSZeroRect {
didSet {
frameAsValue = NSValue(rect: frame)
}
}
override func awakeFromInsert() {
frame = NSMakeRect(0, 0, 0, 0)
}
override func awakeFromFetch() {
frame = frameAsValue.rectValue
}
}
我现在假设您必须在每个实体的类层次结构中声明所有继承的属性。我现在没有时间测试这个,但很快就会回来。
【问题讨论】:
-
NSRect 不是 Core Data 模型检查器中支持的类型。您是如何定义 Core Data 属性的?
-
使用可转换的,因为我认为它符合 NSCoding 标准
-
您可以将 NSRect 转换为字符串并将其存储:developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…
-
我不这么认为(NSRect 是一个 C 结构,而不是一个类)。看看developer.apple.com/library/mac/documentation/Cocoa/Conceptual/…,有专门针对 NSRect 的示例。
-
您的问题似乎与 子类 无关(在这种情况下,您应该相应地更新标题和内容)。
标签: macos cocoa swift core-data