2011-04-22 2 views
4

Apple "Concurrency with Core Data" documentation은 백그라운드 스레드와 함께 핵심 데이터를 사용할 때 다음을 설명합니다. 백그라운드 스레드에서코어 데이터 관리 대상 객체 컨텍스트를 백그라운드 스레드에 안전하게 저장하는 올바른 방법은 무엇입니까?

저장 오류가 발생하기 쉬운

비동기 큐와 스레드가 종료 에서 응용 프로그램을 방해하지 않는 것입니다. (특히, 모든 NSThread 기반 스레드 이따 전체에 대한 pthread에 대한 문서 세부 사항 및 프로세스가 모두 분리하지 스레드가 종료 한 때까지만 를 실행 "분리 된"입니다.)

특히 :

백그라운드 스레드에 저장해야하는 경우 주 스레드가 모든 저장 작업이 완료 될 때까지 응용 프로그램이 종료되지 않도록 추가 코드를 작성해야합니다.

IOS 응용 프로그램 내에서 이것을 달성하기위한 권장 방법은 무엇입니까?

답변

5

앱 대행자 applicationWillTerminate 및 관련 메소드에서 변경 사항을 저장하지 않은 백그라운드 스레드가 있는지 확인하고 앱이 종료되거나 백그라운드로 들어가기 전에 저장해야합니다.

+1

+1 "관련 메소드"에는'applicationDidEnterBackground'가 포함되어 있음을 명심하십시오. 앱은 백그라운드로 들어가서 추가 알림없이 일시 중지 및 종료 될 수 있습니다. –

+1

감사. IOS 프레임 워크 내부에서 스레드로 많은 작업을 수행하지 못했지만 일부 예제 코드가 있거나 응용 프로그램 대리자 클래스 내부에서 저장되지 않은 변경 사항에 액세스하여 스레드를 검사하는 방법에 대한 설명서를 알려줄 수 있습니까? . – lucasweb

+0

모두 정말 스레딩을 어떻게 구현 했느냐에 달려 있습니다. 예를 들어,'NSOperationQueue'를 사용한다면,'waitUntilAllOperationsAreFinished'가 유용 할 수 있습니다. – paulbailey

0

마법의 기록 (https://github.com/magicalpanda/MagicalRecord/)을 사용하는 것이 좋습니다. 이것은 백그라운드 스레드의 핵심 데이터를 처리하는 것을 대폭 단순화합니다. 최근에 이것을 발견하고 프로젝트에 사용했습니다. 이제 새로운 Magical Record Core Data 래퍼를 사용하기 위해 다양한 기존 앱을 업데이트하기위한 유지 관리 노력을 수행했습니다. 우리가 사용해온 몇 주안에 시간과 번거 로움을 덜어주었습니다.