一对多删除对象不删除多个实体

时间:2015-06-07 18:13:26

标签: ios core-data

我有一个名为Activity(一个)和Game(很多)的实体。我将删除规则设置为Cascade for" game" &{34;活动" Activity实体和Nullify之间的关系(后面会详见***)游戏实体的关系。

如果删除Activity对象,则还会从核心数据中删除所有Game个对象。因此,这种关系的级联规则似乎运作正常。

现在,如果我删除了许多对象中的一个或全部" Game"使用提供的方法:removeGameObject:和removeGame:,Activity对象将不再链接到任何Game个对象。所以这似乎有效。但在做一个独立的查询时,游戏"实体,那些应该被删除的游戏对象仍然在Core Data中。它们不仅仅与任何Activity对象相关联。

***我也尝试过No Action,Cascade删除规则。

我可以手动删除Game对象。但必须有正确的方法来做到这一点。

任何指针?

@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 个答案:

答案 0 :(得分:3)

removeGameremoveGameObjectActivity实体上的方法,那么为什么您认为它们会删除Game个对象?他们完全按照他们的说法执行操作,从Game删除Activity - 删除引用,但实际上并不删除Game对象。这些方法在您拥有多对多关系而非一对一关系时更有用,因为它们允许您轻松地从关系中删除特定对象。

如果要删除Game实体,则需要在deleteObject:实例上调用NSManagedObjectContext方法,指定要删除的Game。如果您执行此操作并且已将删除规则设置为从NullifyGame的反向关系Activity,则Game的引用将从{{Activity中移除1}}。