Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何将NSMutableArray放入实体(NSManagedObject)属性中?_Objective C_Core Data - Fatal编程技术网

Objective c 如何将NSMutableArray放入实体(NSManagedObject)属性中?

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

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


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"];