0

문서 모델에 NSPersistentDocument를 사용하는 Mac 문서 기반 앱이 있습니다.코어 데이터 메인 스레드에 추가 된 스레드의 데이터 읽기

새 문서를 만들면 응용 프로그램에서 일부 기본 데이터 (여러 스포츠 개체와 사용자 데이터)를 initiWithType 메서드의 문서에 추가합니다.

dispatch_async(dispatch_get_global_queue(0, 0),^{ 

    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType]; 
    [moc setPersistentStoreCoordinator:[managedObjectContext persistentStoreCoordinator]]; 
:

- (id)initWithType:(NSString *)typeName error:(NSError **)outError { 
self = [super initWithType:typeName error:outError]; 

NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; 

[[SportManagement sharedManager] addDefaultSports:managedObjectContext]; 
[[UserManagement sharedManager] addDefaultUser:managedObjectContext]; 

[managedObjectContext processPendingChanges]; 

return self; 

}

응용 프로그램은 다음과 같이 내가 설정 스레드에서 실행 일부 하드웨어, 수입 데이터를 (managedObjectContext가 NSPersistentDocument의입니다) 가져 오기 기능이 있습니다

데이터를 하드웨어에서 여러 NSManagedDataObject 항목으로 가져옵니다. 각 ManagedObject에는 'Sport'필드가 있으며 문서를 만들 때 생성 된 스포츠 개체 중 하나를 채워야합니다.

그러나 - (id)initWithType:(NSString *)typeName error:(NSError **)outError에 추가 된 스포츠 객체는 스레드 (moc)의 새 ManagedObjectContext에 존재하지 않습니다.

앱을 실행하면 새 문서를 만든 다음 1 분 정도 기다렸다가 가져 오기를 시도하면 스포츠 개체가 스레드 관리 객체 컨텍스트에 존재하게됩니다.

스레드의 새 ManagedObjectContext를 NSPersistantDocument의 주 ManagedObjectContext와 어떻게 동기화합니까?

시도 : [managedObjectContext processPendingChanges];[managedObjectContext setStalenessInterval]; 어느 쪽도 아니지만이 문제를 해결하는 것 같습니다.

흥미롭게도, 이것은 단지 10.7

답변

1

설정 NSManagedObjectContextDidSaveNotification 알림을받을 수있는 당신의 "주"MOC에, 맥 OS X 10.8에 일어날 표시하고, 배경 MOC가 -mergeChangesFromContextDidSaveNotification:로 저장할 때 변경 내용을 병합하지 않습니다. 당신은 MOC에 변경 한 것처럼

편집

OK, 그것은 보이지만, 그것은 단지 스크래치입니다. 데이터가 실제로 영구 저장소에 저장 될 때까지 영구 저장소는 새 데이터 변경에 대해 알지 못합니다.

따라서 다른 MOC를 만들어 PSC에 연결하면 변경 사항을 알 수 없습니다.

"잠시 후"작동하기 때문에 자동 저장된 시간을 알 수 있습니다.

초기 콘텐츠를 만든 후에 문서를 수동으로 저장하려고합니다.

+0

나는 이미이 응용 프로그램에 포함되어 있지만 데이터를 스레드에서 주 스레드로 다시 가져 오는 것입니다. 내가 뭘 하려는지 이미 메인 스레드에서 ManagedObjectContext 문서에 추가 된 데이터를 새 스레드의 새 ManagedObjectContext에 표시되도록 가져 오는 것입니다. –

+0

그럼 혼란 스럽네요. 왜냐하면 지금 내가 당신의 질문과 코멘트를 함께 읽었을 때, 당신이 묘사하는 시나리오조차도 그려 낼 수 없기 때문입니다. 즉, 주석의 마지막 문장은 무엇을 의미합니까? 당신은 (그리고 아마도 문제를 일으키는 실제 코드로) 정교 할 수 있습니까? –

+0

원본을 편집 했으니 까 - 이제 조금 더 명확 해지기를 바랍니다 - 도와 줘서 고마워요 –