Ios 魔法记录-上下文(不保存)

Ios 魔法记录-上下文(不保存),ios,objective-c,sqlite,magicalrecord,Ios,Objective C,Sqlite,Magicalrecord,我完全不确定是什么问题。我正在创建一个新对象并将其插入上下文: Object *object = [Object MR_createEntity]; object.name = @"blahblah"; NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext]; [context MR_saveToPersistentStoreAndWait]; 根据说明,我不应该使用+MR_contextForC

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

Object *object = [Object MR_createEntity];
object.name = @"blahblah";
NSManagedObjectContext *context = [NSManagedObjectContext MR_defaultContext];
[context MR_saveToPersistentStoreAndWait];
根据说明,我不应该使用
+MR_contextForCurrentThread
,因此我不:

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

但是,如果我打开我的应用程序数据,我可以看到3个文件(1)
appname.sqlite
,(2)
appname.sqlite shm
和(3)
appname.sqlite wal
。据我所知,2和3是唯一的缓存。当我打开带有2和3的文件1时,我可以看到我的所有数据。但是,当我只打开文件1(复制到远离2&3的地方)时,我的数据库中没有数据,因此我支持某些东西不正常工作

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


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

您在此处给出的代码是正确的。shm文件称为共享内存日志。wal被称为预写日志。它们可以帮助SQLite更快地执行保存和获取。也就是说,您应该始终能够打开sqlite文件并查看数据存储中的内容


有了它,需要考虑的一些事情是启用日志。您的数据可能未保存,因为您已按要求指定了属性,但未填写该属性。此外,您可能在错误的位置查找o

在这种情况下,我不会在wal和shm文件中也看到这些数据,但当我附加这两个文件时,我可以看到所有数据。使用外部编辑器打开后,这些文件将与.sqlite合并,从那时起,我可以看到所有只使用.sqlite而不使用wal和shm文件的内容。然后,将所有数据放入单个sqlite文件(与以前一样)的最佳方法是查看sqlite的pragma选项,并在设置存储之前设置适当的选项。SQLite似乎在商店创建后没有对pragma设置的更新做出响应,但我可能在那里做错了。。。