3

응용 프로그램 내에서 동일한 NSManagedObject을 공유해야하는 다른 UIViewController 가질 수 있습니다. 나는 다음과 같이 일반적으로 해요 :NSManagedObjects UIViewControllers 전달할 수있는 요리법

@interface CustomController : UIViewController 

@property (nonatomic, retain) ProductNSManagedObject* productManaged; 

@end 

을 그럼 난 CustomController을 istantiate 때 나는 다음처럼 주입 :

한 번 수행
customController.productManaged = .... 

, CustomController 그것을 해제 할 책임이있다.

이 접근법은 잘 작동하지만 올바른지 여부는 알 수 없지만 컨트롤러에 해당 객체가 필요하지만 해당 객체가있는 컨트롤러의 직접적인 하위 노드가 아닌 경우 어떻게해야합니까? 예 :

MainController -> ChildController -> SubChildController -> .... 

여기에서 MainController에는 관리 객체가 있습니다.

중간 속성을 많이 만들어야하나요 아니면 신선한 NSFetchRequest 또는 다른 것을 실행해야합니까?

동일한 측면이 NSManagedObjectContext에 적용될 수 있습니다. 주위를 검색 한 결과 컨텍스트가있는 응용 프로그램 위임자 (있을 경우)에서 그 컨텍스트를 가져올 수 있다는 것을 알았습니다. 그러나 마커스 자라 (Marcus Zarra)가 passing-around-a-nsmanagedobjectcontext-on-the-iphone에 쓴 것처럼이 접근법에는 유연성이 부족합니다.

제안 사항? 미리 감사드립니다.

답변

1

이것은 매우 일반적인 질문입니다 (관련 항목은 herehere 참조). 관련 질문에 대한 답을 썼을 때, 여러분은 싱글 톤을 피하고 객체 인스턴스화를 처리 할 별도의 객체를 생성하고 애플리케이션의 객체 그래프를 작성해야합니다. 이 별개의 객체는 모든 공유 객체에 대한 참조를 보유 할 수 있으며, 생성되는 객체에 제공 할 수 있으므로 일반 객체가 다른 객체에 대한 종속성으로 전달하기 위해 참조를 유지하지 않아도됩니다. 싱글 톤 오용에 대한 더 많은 논리적 근거와 추가 지침, 특히 Miško Hevery의 기사를 보려면 blog post을 참조하십시오.

싱글 톤없이 앱을 연결하는 방법을 보여주고 커플 링을 낮게 유지하고 다른 싱글 톤 문제를 해결하는 방법을 보여주는 sample Xcode project을 만들었습니다. 지금은 매우 간단합니다. 나중에 일반적인 사용 사례를 추가 할 것입니다.

+0

답장을 보내 주셔서 감사 드리며 귀하의 제안에 +1하십시오. 하지만 당신이 의미하는 것은 무엇입니까? *이 개별 객체는 모든 공유 객체에 대한 참조를 보유 할 수 있으며 객체를 빌드 할 객체에 공급할 수 있습니다. 따라서 일반 객체가 다른 객체에 대한 종속성으로 전달하기 위해 참조를 유지하지 않아야합니다. . *? 샘플 프로젝트를 만들 때 알려주십시오. –

+0

방금 ​​해답을 읽었습니다. 유용합니다. 접근 방식은 매우 깨끗한 것 같지만 이해할 수없는 것은 응용 프로그램 전체에서 * Factory * factory = [[Factory alloc] init];과 istantied되는 객체 * factory *를 참조하는 방법입니다. 다시 감사합니다. –

+0

편집을 참조하십시오, 샘플 프로젝트는 분명히해야합니다. – zoul

2

응용 프로그램 전체에서 사용할 관리되는 개체 컨텍스트가 포함 된 싱글 톤 개체를 만듭니다. 이 싱글 톤 내에 데이터와 관련된 지원 코드 (예 : 영구 저장소 코디네이터)를 넣고 뷰와 컨트롤러 정보를 모두 분리했다.

한 가지 경우에는 다른 스레드에 대한 관리되는 개체 컨텍스트가 필요합니다. 리팩터링 (refactor)과 그 상황을 같은 싱글 톤 안에 두는 것이 유용 할 것임이 분명 해졌다. 그런 다음 두 컨텍스트 간의 병합을 싱글 톤 내부에서 수행 할 수 있습니다.

내 코드 관리에 도움이되었습니다. 그것을 고려해보십시오.

+0

+1 귀하의 조언을 들어주십시오. 하지만 ** NSManagedObject ** 객체는 무엇입니까? 컨트롤러 사이에 전달하는 올바른 방법을 알고 계십니까? 고맙습니다. –

+0

그 단독 개체 내에서 관리 대상 개체에 액세스합니까? –

+1

일반적으로 각 뷰 컨트롤러에 대해 가져온 결과 컨트롤러를 사용합니다. 특정보기에 중요한 관리 대상을 추적합니다.페치 된 결과 컨트롤러는 단독 개체를 통해 관리되는 개체 컨텍스트에 바인딩됩니다. 이렇게하면 관리 대상 객체 컨텍스트가 모든 뷰의 작업을 통해 변경되면 frc가 다른 뷰에 바인딩되어 해당 대리인 메서드에 응답하고 호출 할 수 있습니다. – Jim

관련 문제