【问题标题】:Parent/Child NSManagedObjectContext not working父/子 NSManagedObjectContext 不起作用
【发布时间】:2012-10-15 10:37:31
【问题描述】:

我在使用父子 NSManagedObjectContext 时遇到了一些问题。 问题是我想在我的 EventsPlanner 类中使用一个子 NSManagedObjectContext 来创建一个随机事件。如果您发现直接保存到主 NSManagedObjectContext 可以正常工作,但我想使用子级并更新到父级。

如果您看到按下“+”按钮会添加一个新事件,但它看起来是空的。

我添加了示例项目 --> https://dl.dropbox.com/u/63377498/ParentChildExperiment.zip

创建子 NSManagedObjectContext:

- (NSManagedObjectContext *)managedObjectContext
{
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    [_managedObjectContext setUndoManager:nil];
    [_managedObjectContext setParentContext:appDelegate.managedObjectContext];
    return _managedObjectContext;
}

保存:

Event *event = [[Event alloc] initWithEntity:self.eventEntity insertIntoManagedObjectContext:nil];
event.title = ...;
event.location = ...;
event.timeStamp = ...;

[self.managedObjectContext insertObject:event];

[self.managedObjectContext performBlock:^{

NSError *childError = nil;
if ([self.managedObjectContext save:&childError]) {
    [self.managedObjectContext.parentContext performBlock:^{

        NSError *parentError = nil;

        if (![self.managedObjectContext.parentContext save:&parentError]) {
            NSLog(@"parent error: %@", [parentError description]);
            abort();

        }                        
    }];
} else {
    NSLog(@"child error: %@", [childError description]);
    abort();
}}];

谢谢!

【问题讨论】:

    标签: ios iphone core-data nsmanagedobjectcontext


    【解决方案1】:

    我不能告诉你这不起作用的确切原因,但问题似乎是你在没有托管对象上下文的情况下创建了 Event 实体,然后将其添加到 MOC:

    // Create random object
    Event *event = [[Event alloc] initWithEntity:self.eventEntity insertIntoManagedObjectContext:nil];
    event.title = ...;
    event.location = ...;
    event.timeStamp = ...;
    
    // Insert object
    [self.managedObjectContext insertObject:event];
    

    如果你把它改成

    Event *event = [[Event alloc] initWithEntity:self.eventEntity
                  insertIntoManagedObjectContext:self.managedObjectContext];
    event.title = ...;
    event.location = ...;
    event.timeStamp = ...;
    

    然后新事件在表格视图中正确显示。

    【讨论】:

    • 该死,这确实有帮助。但作为一项规则,我通常不会在检查里面的所有信息是否正确之前添加 NSManagedObject。让我们看看情况如何。顺便说一句,谢谢!
    • 我认为这是 NSManagedObjectContext 中的错误,我需要填写错误报告。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2016-08-24
    • 2014-09-17
    • 2016-12-24
    • 2015-07-13
    • 2015-11-13
    相关资源
    最近更新 更多