我通过MagicalRecord使用Core Data获得了一个小应用程序,目的是学习如何按类别对活动进行分组,并在分组的tableview中显示数据。因此,我有两个实体,其中只有一个在这里使用。它叫做ListActivity,有两个属性,“name”和“category”,两个字符串。
除了难以理解我在MR中提供的各种分组和排序方法的工作方法之外,我添加了一个“TruncateAll”按钮来简单地清除平板,以便我可以重新输入数据。
这是该按钮的IBAction方法:
- (IBAction)dumpMemory:(UIButton *)sender
{
[ListActivity MR_truncateAll];
[self refreshData];
}
这是一件很奇怪的事情:按钮动作按预期擦拭tableview(可能是商店)干净。
但是,如果我通过Xcode中的“停止”按钮终止SIM卡,然后重新启动它,所有数据都会再次出现在tableview 中。以下是一些屏幕截图:
输入数据后
点击TruncateAll按钮后:
杀戮,然后重新启动后,数据神秘地再次出现:
但是,如果我在sim中杀了应用程序:
重新启动时,平板是干净的:
有MagicalRecord经验的人请告诉我我缺少的东西吗?
谢谢!
修改
好的,感谢所有回答的人!每个人都立刻看到了我的错误。我修改了我的IBAction方法:
- (IBAction)dumpMemory:(UIButton *)sender
{
NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
[ListActivity MR_truncateAllInContext:localContext];
[localContext MR_saveToPersistentStoreAndWait];
[self refreshData];
}
现在事情很完美!
非常感谢!
答案 0 :(得分:1)
您可能忘记保存托管对象上下文,以便进行更改 在应用程序重启时不会持续存在。
答案 1 :(得分:1)
这种情况在MagicalRecord
开发中很常见。通过主教程,MagicalRecord
仅在将应用程序置于后台时保存上下文。因此,如果在Application Delegate中调用applicationDidEnterBackground
方法之前终止应用程序,则截断将不会保存。
从模拟器中删除应用程序时,将删除所有应用程序数据。
要解决此问题,请务必在适当的位置调用MagicalRecord
的{{1}}方法,如果您只是在测试,则可以在“全部截断”按钮的save
中