큰 XML 파일을 읽으려면 NSXMLParser
을 사용하고 있습니다. 일단 내가 원하는 데이터 요소를 얻으면 NSManagedObject
을 만들고이를 배경 컨텍스트에 저장하십시오. 가져온 파일에 n
개의 가져온 항목이 있으므로 절대 알 수 없습니다. XML 파일이 읽기 완료 및 내 모든 Core Data
객체가 저장 완료하면코어 데이터가 NSXMLParser를 사용하여 모든 엔티티를 저장 한 시점을 알 수 있습니다.
NSManagedObjectContext *backgroundContext = [ZSSCoreDataManager sharedService].persistentContainer.newBackgroundContext;
[backgroundContext performBlock:^{
// Create and insert new entity here
[self createAndInsertWithDictionary:object];
// Save
if ([backgroundContext hasChanges]) {
NSError *error = nil;
if (![backgroundContext save:&error]) {
NSLog(@"%@", error);
}
// Save was successful, reset to release memory
[backgroundContext reset];
}
}];
구문 분석을 완료 할 수있는 save:
보다 더 빨리 일어날 수 있기 때문에는 어떻게 알 수 있습니까? parserDidEndDocument:
메서드를 알고 있지만 내 개체가 모두 Core Data
에 저장 완료되면이를 알 수 없습니다.
아이디어가 있으십니까?
디스패치 그룹 패턴을 상당히 많이 사용했지만,이 상황에서 xml 개체가 구문 분석 된 후 'dispatch_group_enter'가 호출되어 다른 dispatch_group_enter가 만들어지기 전에 매우 빠르게 저장되면 어떻게 작동하는지 궁금해했습니다. 그러므로'dispatch_group_notify'가 호출 될 수 있습니다. 나는 이것에 대해 틀린가? –
방금 테스트 한 결과'dispatch_group_notify '가 바로 실행됩니다. 다른 아이디어? –
예 - 프로세스를 시작하기 전에 "입력"을 추가하십시오. 'parserDidEndDocument'에 "leave"를 추가하십시오. 그런 다음 파서가 완료되기 전에 notify 블록을 호출 할 수 없습니다. –