ios - 一对多删除对象不删除许多实体上的对象

标签 ios core-data

我有一个名为 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

最佳答案

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

如果你想删除 Game 实体,那么你需要在你的 NSManagedObjectContext 实例上调用 deleteObject: 方法,指定 您要删除的游戏。如果您执行此操作并且已将删除规则设置为 NullifyGameActivity 的反向关系,则对 的引用Game 将从 Activity 中删除。

关于ios - 一对多删除对象不删除许多实体上的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30696850/

相关文章:

iphone - NSPredicate - 未按预期工作

ios - 如何在另一个 Alamofire 请求中运行一个 Alamofire 请求?

ios - MKMapView 设置样式为黑白

ios - 加载大量远程图像 - 内存问题

iOS Core Data - 将相关数据添加到实体

cocoa - 修改通过核心数据映射的 sqlite 数据库会引发错误 : uncaught exception of class 'NSCFString'

ios - 核心数据文件位于何处?

ios - 为什么 navigator.device.capture.captureVideo 有时会显示 Picture Camera 而不是摄像机?

ios - RestKit 0.20.2 中创建的重复 Core Data 对象

objective-c - ObjC,核心数据 : "do not allow duplicates"?