ios - 在 Sqlite 中存储 NSMutableArray

标签 ios sqlite nsmutablearray

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

更新:

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

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}}"
)

如您所见,它是一个 CGRect 数组。

最佳答案

好的——使用 Core Data 会更容易一些,但基础知识是相同的。您需要使用存档将数组数据存储到 NSData 对象中:

NSData *dataFromArray = [NSKeyedArchiver archivedDataWithRootObject:myArray];

然后将该数据保存为数据库中的 blob。根据您使用的 SQLite 包装器,它可能有一个方法获取 NSData 对象并将其转换为字节,否则您可以通过以下方式获取原始字节:

const char *arrayBytes = [dataFromArray bytes];

要取回数据,您可以将数据库中的字节取回到 NSData 对象中,然后将其取消存档。假设您可以将 blob 从数据库中取出并放入名为 dataFromDB 的 NSData 对象中,您将执行以下操作:

NSArray *myArrayFromDB = [NSKeyedUnarchiver unarchiveObjectWithData:dataFromDB];

您将恢复阵列!

关于ios - 在 Sqlite 中存储 NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622690/

相关文章:

iphone - 正确初始化后添加时 NSMutableArray 崩溃

javascript - 如何在 ionic 中的 app.run() 中包含 HTTP 请求

android - 使用 cordova (phonegap) 移动相机捕获的视频文件不会刷新图库缩略图

ios - addChild 在 SpriteKit 中不起作用

python - 使用 mysql 数据库配置 apache 超集

html - 有没有人在使用 IOS 8.3 使用内容为真棒字体分配颜色时遇到问题?

sqlite - 在 SQLite 数据库中插入当前日期和时间

SQL函数表插值

ios - 从 NSMutableArray 中删除值时崩溃