1

我定义了一个名为“地图”的实体。它具有三个属性:

scale :带有 NSFormatter 的 NSNumber(如果你想要一个 NSNumber 而不是一个 NSString,它是必需的,它 >bangs<)。

单位:NSString

mapData:二进制数据?转化价值 ?

此 mapData 属性会导致问题。我有一个自定义 NSView(“矩阵”属性),它将一些引用存储到 NSMutableArray 中。这是我要放入 mapData 属性的数组。但这不起作用:

[[[mapController arrangedObjects]lastObject] setValue:[matrix colorReference]forKey:@"mapData"];

忽略除此之外的所有内容:“lastObject”:是(单个)地图实体。[matrix colorReference] 是(属性)NSMutableArray。

现在,为了简化:我希望 NSMutableArray 成为 Map 实体的“mapData”属性,在保存文档时存储,然后检索并传输到自定义视图。设计很清晰,做起来的方法要少得多……</p>

请帮帮我。

4

2 回答 2

2

您可以通过将属性Binary Data类型设置为基本上是类型来序列化和排列并将其存储在 Core Data中NSData *

然后通过使用将您的数组序列化为 NSData NSKeyedArchiver

NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myArray];

并返回 NSArray 使用NSKeyedUnarchiver

NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
于 2012-07-05T11:19:11.557 回答
1

好吧,实际上它更简单。

Core Data 确实将 NSMutableArray 序列化为类型为“Transformable”的属性。转换当然是可逆的,所以我可以直接使用它来设置我的自定义视图的属性,只需使用:

[matrix setColorReference:[[mapController content]valueForKey:@"mapData"]];

其中“matrix”是 NSView,“colorReference”是它的 NSMutableArray 属性,“map controller”是存储带有键“mapData”的 NSData 的实体。

对于反向操作(保存在文件中的编辑地图),我这样做:

[[mapController content] setValue:colorReference forKey:@"mapData"];

由于 Core Data 的属性是 KVO 兼容的,文件被标记为已编辑,当然也可以撤消!

为了保持对象之间的引用(控制器 --> 视图和反向),我只需在子类中使用 IBOutlet 属性,在 IB 中进行绑定,然后让框架完成其余的工作(比我做得更好)。

谢谢!

于 2012-07-07T12:44:57.137 回答