神奇记录 - 背景(不保存)

时间:2014-07-25 10:35:51

标签: ios objective-c sqlite magicalrecord

我完全不确定问题是什么。我正在创建一个新对象并将其插入上下文:

Object *object = [Object MR_createEntity];
object.name = @"blahblah";
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
[context MR_saveToPersistentStoreAndWait];

根据docs我不应该使用+ MR_contextForCurrentThread所以我不会:

  

特别是,不要在任何+ [MagicalRecord saveWithBlock:...]方法中使用+ MR_contextForCurrentThread - 返回的上下文可能不正确!

但是,如果我打开我的应用数据,我可以看到3个文件(1)appname.sqlite,(2)appname.sqlite-shm和(3)appname.sqlite-wal。据我所知2& 3只是缓存。当我打开文件1伴随2和3时,我可以看到我的所有数据。但是,当我只打开文件1(复制到远离2和3的某个地方)时,我的数据库中没有数据,所以我认为某些东西没有工作正常。

问题仅在不在模拟器上的设备上可见,并且只有从应用程序数据将.sqlite复制到计算机时才会出现。如果您复制所有3个文件,您可以看到所有记录,但它建议所有内容都保存在缓存而不是sqlite中。

也许我应该将[Object MR_createEntity]交换到[Object MR_createInContext:context],因为该对象已创建但未插入持久存储中?

1 个答案:

答案 0 :(得分:1)

您在此处提供的代码是正确的。 shm文件称为Shared Memeory日志。 wal被称为Write Ahead Log。他们可以帮助SQLite更快地执行保存和提取。也就是说,您应该始终能够打开sqlite文件并查看数据存储中的内容。

有了这个,要注意的一些事情是启用日志。可能你的数据没有保存,因为你已经根据需要指定了一个属性而没有填写它。另外,你可能看错了地方o