문서 모델에 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
나는 이미이 응용 프로그램에 포함되어 있지만 데이터를 스레드에서 주 스레드로 다시 가져 오는 것입니다. 내가 뭘 하려는지 이미 메인 스레드에서 ManagedObjectContext 문서에 추가 된 데이터를 새 스레드의 새 ManagedObjectContext에 표시되도록 가져 오는 것입니다. –
그럼 혼란 스럽네요. 왜냐하면 지금 내가 당신의 질문과 코멘트를 함께 읽었을 때, 당신이 묘사하는 시나리오조차도 그려 낼 수 없기 때문입니다. 즉, 주석의 마지막 문장은 무엇을 의미합니까? 당신은 (그리고 아마도 문제를 일으키는 실제 코드로) 정교 할 수 있습니까? –
원본을 편집 했으니 까 - 이제 조금 더 명확 해지기를 바랍니다 - 도와 줘서 고마워요 –