2014-07-11 1 views
0

NSMainQueueConcurrencyType으로 생성 된 moc (self.managedObjectContext)가 있습니다. createAnObject는 것에 대한 구현을자식 컨텍스트에서 생성 된 관리 객체가 주 스레드에 반영되지 않았습니다.

ManagedObjectType1 *obj1 = [self createAnObject]; 

- -

이제 방법이 방법을 호출

- (ManagedObjectType1 *) createAnObject { 

NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; 
childContext.parentContext = self.managedObjectContext; 

ManagedObjectType1 *obj1 = //..initialize in childContext 

return obj1 
} 

으로 obj1가 (이 호출 된 장소에서) 메서드가 반환 후 무기 호입니다 obj1은 반환 될 때 메서드 구현에 데이터가 있습니다.

무엇이 잘못 될 수 있습니다. NSPrivateQueueConcurrencyType 가진 childContext 할당 시도했지만 그 중 도움이되지 않았습니다.

답변

0

이것은 효과가 있습니다. 그러나 이것을 할 수있는 좋은 방법일까요?

- (ManagedObjectType1 *) createAnObject { 

__block ManagedObjectType1 *obj1; 

[self.managedObjectContext performBlockAndWait:^{ 
NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; 
childContext.parentContext = self.managedObjectContext; 

obj1 = //..initialize in childContext 
}]; 

return obj1 
} 
+0

또한이 메서드가 아닌 외부 범위에 childContext를 만들어야했습니다. 그렇지 않으면 childContext가 해제되고 반환 된 객체 (obj1)에서 모든 속성에 대해 nil을 반환하지만 그 자체에 대해서는 반환하지 않는 이상한 문제가있었습니다. – OutOnAWeekend

관련 문제