2012-08-08 4 views
0

그래서 코코아에서 문서 기반 애플리케이션을 만들고 NSManagedObjectContext를 이해하려고합니다. Apple의 "Core Data Basics"를 읽었지만 내 머리를 감쌀 수는 없습니다.문서 기반 코코아 응용 프로그램을위한 다중 컨텍스트?

MyCoreDataUtility *coreData = [MyCoreDataUtility sharedCoreDataUtility]; 
NSManagedObjectContext *context = [coreData context]; 

내가 사이트에서이 아이디어를 얻었다 "코코아가 내 여자 친구는"내 모든 클래스는 다음 코드 줄을 통해 컨텍스트를 얻을 수 있도록 내 응용 프로그램에서 나는 사용자 정의 CoreDataUtility 클래스를 만들었습니다. 내가 혼란스러워하는 곳은 응용 프로그램을 실행하고 새 창 (새 파일 소유자 클래스는 NSPersistentDocument의 하위 클래스)을 만들 때입니다. 새 창에서 컨텍스트를 변경하면보기가 이전 창에서 변경 내용을 반영하고 새로운 것. 이를 바탕으로 두 창 모두 동일한 컨텍스트 또는 적어도 동일한 데이터를 어떤 방식으로 참조한다고 가정합니다.

그래서 제 질문은 다음과 같습니다

  1. 나는 새로운 컨텍스트가 생성되는 새 창을 만들 때마다이 올바른지 가정이? 새로운 컨텍스트가 생성되고 그들이 다른 경우
  2. 이이 영구 저장소 코디네이터 또는 영속 객체 저장소 함께 할 수있는 뭔가를 (이 있나요 (I 실제로 두 컨텍스트의 메모리 주소를 인쇄하고 주소는 다릅니다) 이러한 개념은 또한 내 마음에 불투명 한가?)
  3. 모든 문서가 동일한 컨텍스트를 참조하는 경우 문서를 만들 때마다 새 컨텍스트를 만드는 것이 내 책임입니까?

감사합니다.

답변

0

나는 새 창을 만들 때마다 새로운 컨텍스트가 만들어 졌다고 가정합니다. 맞습니까?

아니오 및 예. 새 창을 작성해도 새로운 컨텍스트는 작성되지 않지만 "새 창"으로 보이는 것이 실제로는 "새 문서 작성"작업입니다. CoreDate를 사용하는 문서 기반 응용 프로그램에서는 모든 문서에 대해 새로운 컨텍스트를 단독으로 생성하는 영구 저장소가있을 가능성이 큽니다.

두 번째 질문에 대한 답변이기도합니다. 상점 조정자는 응용 프로그램의 모든 문서를 관리하는 중심점에 불과합니다. 열기, 저장 및 모든 부작용과 같은 메뉴 관련 작업을 처리합니다.

모든 문서 내 책임은 새로운 상황에 맞는에게 문서가 생성 될 때마다 생성 그것이 같은 컨텍스트를 참조하면?

그건 불가능합니다. 하나의 컨텍스트는 하나의 파일 (또는 "저장")과 관련 될 수 있으므로 모든 문서는 "최소한"한 컨텍스트를 가져야합니다. CoreData 및 다중 문서 기반 응용 프로그램에 대한 서식 파일을 사용하는 경우 새 컨텍스트를 만드는 것에 대해 걱정할 필요가 없습니다. 전에 말했듯이 가게 코디네이터가이를 처리 할 것입니다. 그러나 CoreData에 대해 더 많이 배우고 특히 멀티 스레딩을하는 경우 컨텍스트가 스레드를 통과 할 수 없기 때문에 둘 이상의 컨텍스트를 만들어야합니다.

코코아에서 링크를 제공 할 수 있다면 내 코드 친구를 어디에서 가져 갔는가?싱글 톤이 컨텍스트를 저장하기를 원하는 것 같고 대개 문서 기반 응용 프로그램에서 나쁜 생각입니다. 왜냐하면 하나의 기능에 다른 문서의 컨텍스트를 부여하는 것이 매우 쉽기 때문입니다. 응용 프로그램은 컨텍스트가 전달되는 좋은 흐름을 가져야합니다. 그러나 내 응용 프로그램이 문서 기반이 아닌 경우 항상 싱글 톤을 사용합니다.

+0

감사합니다 ...이 스레드에 답장 할 때 공을 떨어 뜨려 죄송합니다. – schmudu

관련 문제