iOS MagicalRecord之谜。为什么我的数据在truncateAll之后重启时重新出现?

时间:2014-01-13 19:52:05

标签: ios uitableview magicalrecord

我通过MagicalRecord使用Core Data获得了一个小应用程序,目的是学习如何按类别对活动进行分组,并在分组的tableview中显示数据。因此,我有两个实体,其中只有一个在这里使用。它叫做ListActivity,有两个属性,“name”和“category”,两个字符串。

除了难以理解我在MR中提供的各种分组和排序方法的工作方法之外,我添加了一个“TruncateAll”按钮来简单地清除平板,以便我可以重新输入数据。

这是该按钮的IBAction方法:

- (IBAction)dumpMemory:(UIButton *)sender
{
    [ListActivity MR_truncateAll];
    [self refreshData];
}

这是一件很奇怪的事情:按钮动作按预期擦拭tableview(可能是商店)干净。

但是,如果我通过Xcode中的“停止”按钮终止SIM卡,然后重新启动它,所有数据都会再次出现在tableview 中。以下是一些屏幕截图:

输入数据后

enter image description here

点击TruncateAll按钮后:

enter image description here

杀戮,然后重新启动后,数据神秘地再次出现:

enter image description here

但是,如果我在sim中杀了应用程序:

enter image description here

重新启动时,平板是干净的:

enter image description here

有MagicalRecord经验的人请告诉我我缺少的东西吗?

谢谢!

修改

好的,感谢所有回答的人!每个人都立刻看到了我的错误。我修改了我的IBAction方法:

- (IBAction)dumpMemory:(UIButton *)sender
{
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    [ListActivity MR_truncateAllInContext:localContext];
    [localContext MR_saveToPersistentStoreAndWait];

    [self refreshData];
}

现在事情很完美!

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可能忘记保存托管对象上下文,以便进行更改 在应用程序重启时不会持续存在。

答案 1 :(得分:1)

这种情况在MagicalRecord开发中很常见。通过主教程,MagicalRecord仅在将应用程序置于后台时保存上下文。因此,如果在Application Delegate中调用applicationDidEnterBackground方法之前终止应用程序,则截断将不会保存。

从模拟器中删除应用程序时,将删除所有应用程序数据。

要解决此问题,请务必在适当的位置调用MagicalRecord的{​​{1}}方法,如果您只是在测试,则可以在“全部截断”按钮的save