iOS多个entnate对一个managedObjectContext

时间:2013-03-20 22:36:13

标签: ios core-data entity managedobjectcontext

我的iOS应用程序中有一个核心数据模型,包含两个实体。

实体:单位/属性:unit_name - NSString

- >>与Exerciseone 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包含NSPersistentStoreCoordinatorNSManagedObjectContextNSManagedObjectModel以及一些读写和删除的方法。

感谢您的帮助!

1 个答案:

答案 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实例?您确定不想使用查找或创建模式吗?