2013-03-21 1 views
9

CoreData로 데이터를 다운로드하고 가져 오는 NSOperation 하위 클래스가 있습니다.어떤 MagicalRecord 저장 방법

이 작업을 완료하면 컨텍스트를 저장하고 기본 컨텍스트에 병합하고 싶습니다.

절약은 블록에서 수행되지 않고 이미 BG 스레드에 있기 때문에 동기식으로 수행됩니다.

MR 저장 방법을 사용해야 할 변경 사항을 완료 했습니까?

그 중 수십 가지가 있으며 각각의 기능이 무엇인지 잘 모르겠습니다.

내가 사용해야 ...

- (void)save: 
- (void)saveOnlySelfAndWait; 
- (void)saveToPersistentStoreAndWait; 

아니면 내가의 결말을 제어 할 수 있도록 동기가되고 싶어요에 ...

+ (void)saveUsingCurrentThreadContext... 

모든 변경 사항을 수행해야합니다 조작.

적어도 다른 사람이 다른 저장 방법의 차이점을 설명 할 수 있습니까?

답변

14

본인은 이러한 방법이 잘 설명되어 있지 않음을 인정합니다. 그러나 Core Data 중첩 컨텍스트 모델을 잘 따르고 있습니다. MagicalRecord

  1. NSManagedObjectContextsave:를 사용하지 마십시오. MagicalRecord에는 추가 오류 처리, 로깅 및 완료 핸들러가 모두 내장되어 있습니다.이 핸들러를 사용하고 싶습니다.

  2. 어디에서 데이터를 가져올 필요가 있는지 알고있는 것 같습니다 (한 맥락에서 루트로). 사용하려는 저장 메소드에 따라 계층 구조에 따라 다 (니다. 한 단계 만 깊게 (즉, defaultContext의 하위 컨텍스트에서) saveOnlySelfAndWaitdefaultContext에 저장됩니다. 그렇지 않으면 saveToPersistentStoreAndWait이 계층 구조를 통해 데이터 저장소로 이동합니다.

  3. andWait 메서드가 호출을 차단하고 있습니다. 핸들러를 완료 한 호출은 그렇지 않습니다. 이것들은 사용법이 상당히 간단합니다.

+0

완벽! 다시 한번 감사드립니다. AFAIK 나는 깊은 계층 구조를 전혀 만들지 않을 것입니다. NSOperation에서 [NSManagedObjectContext contextForCurrentThread]를 사용하면됩니다. 방금 saveToPersistentStoreAndWait을 사용합니다. 다시 한번 감사드립니다. – Fogmeister

+0

@ Fogmeister 당신이 당신을 위해 일할 수 있었습니까? NSOperation 안에 저장하려고하는데 오류가없는 동안 객체는 그냥 비어 있습니다. – RyanJM

+0

@casademora 내가 defaultContext만을 사용한다면? MagicalRecord를 사용하고 MR_defaultContext를 사용합니다. – onmyway133