Objective c 如何将NSMutableArray放入实体(NSManagedObject)属性中?
我定义了一个名为“Map”的实体。它有三个属性:Objective c 如何将NSMutableArray放入实体(NSManagedObject)属性中?,objective-c,core-data,Objective C,Core Data,我定义了一个名为“Map”的实体。它有三个属性: scale:NSNumber with NSFORMATER(如果您想要NSNumber而不是NSString,则必须使用NSNumber,后者>bangs,您可以通过使属性二进制数据类型基本上为NSData*类型来序列化和数组并将其存储在核心数据中 然后使用NSKeyedArchiver将阵列序列化为NSData NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myArr
scale:NSNumber with NSFORMATER(如果您想要NSNumber而不是NSString,则必须使用NSNumber,后者>bangs,您可以通过使属性二进制数据类型基本上为
NSData*
类型来序列化和数组并将其存储在核心数据中
然后使用NSKeyedArchiver
将阵列序列化为NSData
NSData *myData = [NSKeyedArchiver archivedDataWithRootObject:myArray];
然后使用NSKeyedUnarchiver
返回NSArray:
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
事实上,这更简单 Core Data确实将NSMutableArray序列化为类型为“Transformable”的属性。转换当然是可逆的,因此我可以直接使用它设置自定义视图的属性,只需使用:
[matrix setColorReference:[[mapController content]valueForKey:@"mapData"]];
其中“matrix”是NSView,“colorReference”是其NSMutableArray属性,“map controller”是使用键“mapData”存储NSData的实体
对于反向操作(保存在文件上的已编辑地图),我执行以下操作:
由于核心数据的属性与KVO兼容,因此该文件被标记为已编辑,当然,还可以撤消
为了保持对象之间的引用(controller-->view和reverse),我只需在子类中使用IBOutlet属性,在IB中进行绑定,并让框架完成其余的工作(比我做得更好)
谢谢!我没有收到任何错误,只是在将属性设置为“可转换”时,我认为核心数据提供了序列化,我错了吗?它适用于RTFD和图像,而不适用于数组?如果您使用可转换类型,则必须创建NSValueTransformer子类并重写类方法,以提供从对象到NSData的转换和反转。这需要更多的代码。您能发布您的代码吗?我非常确定它可以工作,因为我将它用于NSDictionary myse如果是那样的话。我指的是你a)设置地图数据,b)获取和读取地图数据的代码。这就是代码。这是错的吗?[[[mapController arrangedObjects]lastObject]setValue:[matrix colorReference]forKey:@“mapData”];是我在代码数据中“存储”的方式。控制器中的“lastObject”是托管对象,“mapData”是其属性。
[matrix setColorReference:[[mapController content]valueForKey:@"mapData"]];
[[mapController content] setValue:colorReference forKey:@"mapData"];