我有一个名为 Activity
(一个)和 Game
(多个)的实体。我将 Activity
实体上的“游戏”关系的删除规则设置为 Cascade,并将 Game 实体上的“事件”关系设置为 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
最佳答案
removeGame
和 removeGameObject
是 Activity
实体上的方法,那么您为什么会认为它们会删除 Game
对象?他们完全按照他们说的去做,从这个 Activity
中删除 Game
- 删除引用,但他们实际上并没有删除 Game
对象.当您拥有一对多关系而不是一对一关系时,这些方法会更有用一些,因为它们允许您轻松地从关系中删除特定对象。
如果你想删除 Game
实体,那么你需要在你的 NSManagedObjectContext
实例上调用 deleteObject:
方法,指定 您要删除的游戏
。如果您执行此操作并且已将删除规则设置为 Nullify
从 Game
到 Activity
的反向关系,则对 的引用Game
将从 Activity
中删除。
关于ios - 一对多删除对象不删除许多实体上的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696850/