서버와 ios 장치간에 데이터를 동기화하는 멀티 스레드 응용 프로그램이 있습니다.SQLLite 쿼리에는 결과가 있지만 메서드에서 반환하면 데이터가 손실됩니다.
동기화가 별도의 스레드에서 발생합니다. NSManagedObjectContext에 대한 싱글 톤 패턴을 사용하며 주 스레드에서 만들어집니다. 스레드 문제가 발생하기 시작했고 연구 결과에 따라 컨텍스트가 초기화 된 스레드 외부에서 사용되면 안된다는 것을 알았습니다. 그래서 메인 스레드의 컨텍스트에서 init을 호출하여 동기화 스레드에서 사용했습니다. 그것을 고치기 위해서 나는 다음과 같이했다.
NSPersistentStoreCoordinator을 반환하는 전역 방법을 만들었으며 동기화 스레드에서이 컨디셔너를 사용하여 새 컨텍스트를 만듭니다. 이것은 스레딩 문제를 제거했지만, 이제는 다른 이상한 행동을합니다.
내 동기화 스레드에서 executeFetchRequest 메서드를 호출하고 결과 배열을 다른 메서드로 반환합니다. 디버깅 할 때 93 개의 레코드가 있고 모두 데이터로 채워져 있음을 알 수 있습니다. 그런 다음 반환 된 메서드의 배열을 확인하지만 여전히 93 개의 레코드가 있지만 열 모두에 nil 값이 있습니다. 여기
는 이런 일이 될 이유
+(NSArray *) GetAllRowsInTable:(NSString *) tableName
{
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
[context setPersistentStoreCoordinator:[Globals GetPersistentStoreCoordinator]];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:tableName inManagedObjectContext:context]];
NSError *error;
NSArray *results = [context executeFetchRequest:request error:&error];
return results;
}
아무도 알고 있나요 코드를 무엇입니까?
가져 오기 요청을 만들고 실행하는 코드를 게시 할 수 있습니까? –
코드를 게시했습니다. – neo
오류 개체가 설정되어 있습니까? 그렇다면 오류는 무엇입니까? –