여러 개의 탭보기가있는 탭 컨트롤러를 사용하는 테스트 프로그램을 작성하고 있습니다. 이 프로그램은 여러 XML 파일을 다운로드하고 핵심 데이터를 통해 sqlite 테이블을 구문 분석하고 채 웁니다. 핵심 데이터 변수와 함수는 Xcode 생성 코드에 따라 App Delegate 파일에 있습니다. 나는 앱 위임에 초기화로 관리되는 개체 컨텍스트 공유
나는, 단순히 그것을 필요로 각각의 서브 뷰에 managedObjectContext 변수를 전달하여 예를 시작 :FirstViewController *vc1;
vc1 = [[[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil] autorelease];
[vc1 setManagedObjectContext:self.managedObjectContext];
는 그러나, 나는 전체를 삭제하는 기능 (resetData)가 데이터 저장소 - 영구 저장소 파일을 삭제하고 모든 핵심 데이터 변수 (managedObjectContext, managedObjectModel, persistentStore 등)를 nil로 설정하고 모든 것을 다시 초기화합니다. 이것은 프로그램이 처음부터 시작하여 네트워크의 모든 데이터를 다시 다운로드 할 수 있도록하기위한 것입니다. 이 경우, 서브 뷰는 이제 이전 managedObjectContext를 가리 킵니다.
모든 하위 뷰에서 managedObjectContext 변수를 업데이트하는 가장 좋은 방법은 무엇입니까? 수동으로 하위 데이터의 managedObjectContext 변수를 resetData 함수에서 업데이트 하시겠습니까? NSNotificationCenter를 사용하여 모든보기에 알림을 보내시겠습니까? 전체 영구 저장소 파일을 완전히 삭제하고 다시 초기화하는 중입니까?
내가 현재 단지 MOC를 참조해야 할 모든 클래스에서 앱 위임에 다시 의미이 게터를 뒀다는 :
- (NSManagedObjectContext *)managedObjectContext {
MyAppDelegate* ad = (MyAppAppDelegate*)[[UIApplication sharedApplication] delegate];
return [ad managedObjectContext];
}
나는 코코아/아이폰 OS 디자인 재잘 아주 새로운 노력하고 있어요 이 일을하는 가장 적절한 방법을 찾아야합니다! 내가 지금 가지고있는 것은 작동하지만, 보이지 않는 함정이나 미래의 문제가 있는지 궁금합니다. 감사! CoreData
"모든 영구 저장소 파일을 완전히 삭제하고 다시 초기화하고 있습니까?" 아마. 모든 물체를 제거 할 수 있을까요? – jrturton
@jrturton 모든 개체를 제거하는 것은 확실히 가치가 있습니다. 그러나 그것들이 많으면 천천히 움직일 수 있습니다. CoreData는 데이터베이스가 아닙니다. – tonklon
@tonklon - 확실한 것. 그러나 질문에서 우리는 얼마나 많은 물체가 있는지 알지 못합니다. 당신의 대답은 훌륭합니다. VC 스택을 다시 만드는 것은 길이다. – jrturton