Magical Record级联删除(全部截断)不删除
Posted
技术标签:
【中文标题】Magical Record级联删除(全部截断)不删除【英文标题】:Magical Record cascade delete (truncateAll) not deleting 【发布时间】:2013-07-25 09:17:44 【问题描述】:我在我的应用中使用 Magical Record。
我有关系...
Competition <-->> League
即一个Competition
可以有多个Leagues
。一个League
只能有一个Competition
。
Competition to League
的删除规则设置为 Cascade
。反向删除规则设置为Nullify
。
如果我删除Competition
,那么我期望发生的情况是,属于它的所有Leagues
也会被删除。 (我在以前的应用程序中成功使用过这个)。
我正在测试...
-
下载并插入所有比赛和联赛。
用比赛名称记录所有联赛。
NSArray *leagues = [League findAll];
for (League *league in *leagues)
NSLog(@"%@ - %@", league.name, league.competition.name);
e.g. Man UTD - Premier League
运行以下代码...
[Competition truncateAll];
用比赛名称记录所有联赛。
e.g. Man UTD - (null)
我希望这会删除 Leagues
和 Competitions
?
我的假设是否正确?为什么不做呢?
【问题讨论】:
你如何“用比赛名称记录所有联赛”?您是再次获取它们还是使用指向对象的现有指针? - 请注意,删除规则仅在您save
上下文或调用 processPendingChanges
时应用。
已编辑以显示日志代码。我以为 truncateAll 做到了?我是愚蠢的。我将截断包裹在一个保存块中,它起作用了。谢谢:)
【参考方案1】:
当被管理对象时应用关系删除规则
上下文被保存,或者processPendingChanges
被调用。
在implementation 中可以看到,MagicalRecord 方法MR_truncateAll
调用
deleteObject
在实体的所有对象上,但不保存上下文。
【讨论】:
是否也删除了数据库? @user1007522:不,它会删除给定实体的所有对象,例如[Car truncateAll];
从数据库中删除所有 Car 对象。可能存在其他不受影响的实体。 SQLite 文件本身不会被删除。
@MartinR,好吧,我怎样才能删除整个数据库内容?
@gaussblurinc 您找到删除整个数据库的解决方案了吗? [magicalrecord cleanup]
有效吗?
@ZigiiWong no, [MagicalRecord CleanUp]
用协调器、存储、上下文清理神奇的记录堆栈。您可以通过擦除所有表中的所有内容或擦除数据库文件(如果您使用 sqlite )来清理数据库。看看gist【参考方案2】:
我同意 Martin R.
只需在
之后添加以下行[Competition truncateAll];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];
你会很高兴的! :)
【讨论】:
以上是关于Magical Record级联删除(全部截断)不删除的主要内容,如果未能解决你的问题,请参考以下文章
Magical Record,CoreData,删除一条记录并重新编号
如何使用 Magical Record 从特定上下文中简单地删除一组实体?