在Sqlite中存储NSMutableArray

我有一个NSMutableArray包含多个CGRects的坐标和大小。 我想存储到sqlite中。 是否有可能存储整个数组? 或者,我应该只是手动将CGRects存储在数据库中?

更新:

这是我从数据库中检索到的数据:

62706c69 73743030 d4010203 04050817 18542474 6f705824 6f626a65 63747358 24766572 73696f6e 59246172 63686976 6572d106 0754726f 6f748001 a3090a0f 55246e75 6c6cd20b 0c0d0e5a 4e532e6f 626a6563 74735624 636c6173 73a08002 d2101112 16582463 6c617373 65735a24 636c6173 736e616d 65a31314 155e4e53 4d757461 626c6541 72726179 574e5341 72726179 584e534f 626a6563 745e4e53 4d757461 626c6541 72726179 12000186 a05f100f 4e534b65 79656441 72636869 76657208 11161f28 32353a3c 40464b56 5d5e6065 6e797d8c 949dacb1 00000000 00000101 00000000 00000019 00000000 00000000 00000000 000000c3 

这和我把数据库放入数据库之前完全一样。

代码:

这是我用来检查NSArray是否被归档的代码。 我不把它放在数据库中,因为我只是想确保NSKeyedUnarchive的工作。 这里是:

  NSData *toData = [NSKeyedArchiver archivedDataWithRootObject:rectsArray]; NSLog(@"The data %@", toData); NSArray *fromData = [NSKeyedUnarchiver unarchiveObjectWithData:toData]; NSLog(@"The data %@", fromData); 

toData显示归档的表单,但fromData显示任何内容。 为什么发生这种情况?

这是一个rectsArray的示例:

 ( "NSRect: {{83.389008, 179.61432}, {8.775116, -10.616217}}", "NSRect: {{83.389008, 179.61432}, {8.775116, -10.616217}}", "NSRect: {{83.389008, 179.61432}, {8.775116, -10.616217}}", "NSRect: {{96.085426, 179.61432}, {5.2029028, -10.616217}}", "NSRect: {{101.28833, 179.61432}, {5.8532658, -10.616217}}", "NSRect: {{107.1416, 179.61432}, {4.5525398, -10.616217}}", "NSRect: {{115.61544, 179.61432}, {3.2518141, -10.616217}}", "NSRect: {{115.61544, 179.61432}, {3.2518141, -10.616217}}", "NSRect: {{118.86726, 179.61432}, {6.5036283, -10.616217}}", "NSRect: {{118.86726, 179.61432}, {6.5036283, -10.616217}}" ) 

正如你所看到的,这是一个CGRects数组。

好的 – 这对于Core Data来说更容易一点,但是基础是一样的。 您需要使用存档将数组数据存储到NSData对象中:

 NSData *dataFromArray = [NSKeyedArchiver archivedDataWithRootObject:myArray]; 

然后将这些数据保存为数据库中的斑点。 根据你使用的SQLite包装器,它可能有一个方法采取NSData对象,并将其翻译成字节,否则你可以得到原始字节:

 const char *arrayBytes = [dataFromArray bytes]; 

为了恢复数据,您将数据库中的字节返回到NSData对象中,然后将其解压缩。 假设你可以把你的blob从数据库中取出,并放到一个名为dataFromDB的NSData对象中,你可以这样做:

 NSArray *myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:dataFromDB]; 

你会有你的arrays回来!