2012-02-10 3 views
0

내 CoreData 관리자가 내 뷰와 상호 작용하는 방식이 올바른/최선/가장 효율적인 방법인지 궁금합니다.모든 UINavigationController 임베디드 뷰에서 사용할 수있는 싱글 톤 CoreData 관리자

Apple의 표준 싱글 톤 패턴을 사용하여 CoreData 스택을 저장합니다. 또한 웹 서비스 및 기타 도우미 메서드와 함께 사용할 수있는 유틸리티가 포함되어 있습니다.

2 개의 viewController, tableViewController 및 다른 viewController를 프로그래밍 방식으로 만든 viewController가있는 UINavigation 컨트롤러가 있습니다.

처음 두 viewController는 각각 설정 (웹 서비스 주소 등) 및 로그인입니다. 방망이에서 벗어나서 나는 로그인보기 (두 번째보기)에 나타납니다. 로그인이 성공하면 tableView가 푸시됩니다. 셀을 선택하면 뷰가 프로그래밍 방식으로 만들어지고 푸시됩니다.

각 뷰에는 데이터 저장소가 필요하므로 viewDidLoad에서 싱글 톤을 잡아냅니다.

이 작업을 수행하는 방법입니까? 다른 아이디어는 무엇입니까? 네비게이션 컨트롤러가 속성을 모든 임베디드 뷰에 노출 할 수 있습니까?

감사합니다.

+0

게시물 끝에 3 가지 질문을하거나 (질문을 읽으면서) 한보기 컨트롤러에서 다른보기 컨트롤러로 정보를 이동하는 가장 좋은 방법을 묻고 있습니까? –

+0

나는 지난 3 개의 질문을하고있다. 나는 정보를 잘 옮길 수 있었고 현재의 솔루션이 작동하지만 이것이 나의 첫번째 iOS 프로젝트이다. 기본적으로 내 CoreData/view 아키텍처가 "겉으로 보입니다"면 궁금합니다. –

답변

0

최근까지 Matt Gallagher의 합성 싱글 톤을 사용하여 언급 한 것과 같은 일을했습니다.

그러나 최근에는 ARC를 사용하여 프로젝트를 변환 했으므로 싱글 톤 설정이 다소 단순화되었습니다. 지금 나는 가지고있다 :

static MMPersistentStoreController *sharedMMPersistentStoreController = nil; 

+ (MMPersistentStoreController *)sharedMMPersistentStoreController { 
    if (sharedMMPersistentStoreController == nil) 
    { 
     sharedMMPersistentStoreController = [[self alloc] init]; 
    } 

    return sharedMMPersistentStoreController; 
} 

나는 이것을 꽤 표준 접근법이라고 생각한다. 주변의 물건을 지나치는 것보다 낫습니다.

대체 방법으로는 synthesize을 응용 프로그램 위임자의 property으로 입력 한 다음 UIApplication을 통해 액세스 할 수 있습니다.

앞의 접근 방식에서는 MMPersistentStoreController 클래스 개체로 만든 정적 인스턴스입니다. 후자의 경우 인스턴스는 응용 프로그램에 한 번만 존재할 객체의 ivar입니다.

+0

사과가 핵심 데이터 싱글 톤에서 사람들을 설득했다고 생각했는데 ... 특히 어떤 이유가 있었습니까? – Jeef

+0

구체적 이유는 무엇입니까? 감사 –