我的iOS应用程序中有一个核心数据模型,包含两个实体。
实体:单位/属性:unit_name - NSString
- >>与Exercise
(one to many
)
实体:练习/属性:exercise_name - NSString。
因此,一个unit
可以有多个exercises
。
在我的表视图控制器中列出了所有可用的exercises
。
(因此,我第一次向Exercise
实体发送获取请求,并向此实体发出managedObjectContext
点。
如果我要使用"NEW"
保存unit
exercises
,则保存功能不起作用。
根本没有错误,但unit
表仍然是空的。
以下是保存功能的代码:
Units *newUnit = [NSEntityDescription insertNewObjectForEntityForName:@"Units" inManagedObjectContext:[self.coreDataHelper managedObjectContext]];
newUnit.unit_name = unitTextField.text;//Attribute
newUnit.exercises = exerciseSet;//Relationship (NSSet)
NSError *error = nil;
if (![[self.coreDataHelper managedObjectContext]save:&error]) {
NSLog(@"There was an error! %@", error);
}
else {
NSLog(@"Success!");
}
似乎managedObjectContext
仍然指向Exercise
实体。 (因为它是第一次使用此实体初始化)coreDataHelper
包含NSPersistentStoreCoordinator
,NSManagedObjectContext
,NSManagedObjectModel
以及一些读写和删除的方法。
感谢您的帮助!
答案 0 :(得分:0)
只是为了验证一切都按照应有的方式连接,添加
NSAssert(self.coreDataHelper, @"null coreDataHelper");
NSAssert(self.coreDataHelper.managedObjectContext, @"null MOC");
NSLog(@"available entities: %@",
self.coreDataHelper.managedObjectContext.persistentStoreCoordinator.managedObjectModel.entitiesByName);
如果您已正确设置所有内容,则应该将"Units"
视为您的某个实体。
然后在插入newUnit之后,验证它是否有效: NSAssert(newUnit,@“newUnit没有插入”);
顺便说一下,这对我来说就像是一个逻辑错误:你每次保存时都会创建一个新的Units实例?您确定不想使用查找或创建模式吗?