2012-10-15 33 views
1

我在Parent Child NSManagedObjectContext中遇到了一些麻烦。 问题是我想在我的EventsPlanner类中使用一个NSManagedObjectContext子类来创建一个随机事件。如果你注意到它的作品,如果你直接保存到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(); 
}}]; 

谢谢!

回答

1

我不能给你确切的原因,这并不工作,但问题似乎是,你创建一个没有管理对象上下文事件实体,以及商务部稍后将其添加:

// 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 = ...; 

那么新的事件在表视图中正确显示。

+0

该死的,这实际上有帮助。但作为一项规则,我通常不会在检查里面的所有信息是否正确之前添加NSManagedObject。让我们看看它是如何发展的。顺便说一句,谢谢! – 3lvis

+0

我认为这是NSManagedObjectContext中的一个错误,我需要填写一个错误报告。谢谢! – 3lvis