【发布时间】:2014-01-13 19:52:04
【问题描述】:
我有一个通过 MagicalRecord 使用 Core Data 的小型应用程序,目的是学习如何按类别对活动进行分组并在分组的表格视图中显示数据。因此,我有两个实体,这里只使用其中一个。它叫做 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];
}
现在一切正常!
非常感谢!
【问题讨论】:
-
你什么时候保存(调用 MR_save 的一些变体)?
标签: ios uitableview magicalrecord