我完全不确定问题是什么。我正在创建一个新对象并将其插入上下文:
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]
,因为该对象已创建但未插入持久存储中?
答案 0 :(得分:1)
您在此处提供的代码是正确的。 shm文件称为Shared Memeory日志。 wal被称为Write Ahead Log。他们可以帮助SQLite更快地执行保存和提取。也就是说,您应该始终能够打开sqlite文件并查看数据存储中的内容。
有了这个,要注意的一些事情是启用日志。可能你的数据没有保存,因为你已经根据需要指定了一个属性而没有填写它。另外,你可能看错了地方o