一对多删除对象不删除多个实体上的对象
Posted
技术标签:
【中文标题】一对多删除对象不删除多个实体上的对象【英文标题】:One to Many remove Object not deleting object on many entity 【发布时间】:2015-06-07 18:13:25 【问题描述】:我有一个名为Activity
(一个)和Game
(多个)的实体。我将删除规则设置为级联,用于Activity
实体上的“游戏”关系,并为游戏实体上的“活动”关系设置 Nullify(稍后会详细介绍)。
如果我删除一个Activity
对象,那么所有Game
对象也会从核心数据中删除。因此,这种关系的级联规则似乎运行良好。
现在,如果我使用提供的任一方法删除多个“游戏”对象中的一个或全部:removeGameObject
: 和 removeGame
:,则 Activity
对象将不再链接到任何 Game
对象.所以这似乎奏效了。但是在对“游戏”实体进行独立查询时,那些应该被删除的游戏对象仍然在核心数据中。它们不仅仅是链接到任何Activity
对象。
***我也尝试过No Action,Cascade删除规则。
我可以手动移除游戏对象。但必须有正确的方法来做到这一点。
任何指针?
@class Game;
@interface Activity : NSManagedObject
@property (nonatomic, retain) NSNumber * activityID;
@property (nonatomic, retain) NSString * activityType;
@property (nonatomic, retain) NSSet *game;
@end
@interface Activity (CoreDataGeneratedAccessors)
- (void)addGameObject:(Game *)value;
- (void)removeGameObject:(Game *)value;
- (void)addGame:(NSSet *)values;
- (void)removeGame:(NSSet *)values;
@end
@class Activity;
@interface Game : NSManagedObject
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) Activity *activity;
@end
【问题讨论】:
【参考方案1】:removeGame
和removeGameObject
是Activity
实体上的方法,那么您为什么认为它们会删除Game
对象呢?他们完全按照他们所说的去做,从这个Activity
中删除Game
- 删除引用,但他们实际上并没有删除Game
对象。这些方法在您有一对多而不是一对一关系时更有用,因为它们允许您轻松地从关系中删除特定对象。
如果要删除 Game
实体,则需要在 NSManagedObjectContext
实例上调用 deleteObject:
方法,指定要删除的 Game
。如果您执行此操作并且您已将删除规则设置为 Nullify
上从 Game
到 Activity
的反向关系,那么对 Game
的引用将从 Activity
中删除。
【讨论】:
以上是关于一对多删除对象不删除多个实体上的对象的主要内容,如果未能解决你的问题,请参考以下文章