2015-02-06 3 views
0

이것은 매우 기본적인 질문입니다. AppDelegate.m에서 ,다른 클래스에 언급 된 참조 변수

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.stationInfos = [StationDB database].stationInfos; 
    } 
    return YES; 
} 

와 나는 내 ViewController.m 내부에서 stationInfos를 사용할 수 있어야합니다. 가장 일반적인 방법은 무엇입니까?

+1

View Controller에서'[StationDB database] .stationInfos'를 호출 할 수없는 이유는 무엇입니까? –

+0

'stationInfos'가 필요한 다른 클래스가있을 수 있습니다. 이 경우 'AppDelegate.m'에 포함시키려는 것이 옳은 결정입니까? –

답변

1

내가 일반적으로 눈살을 찌푸리게되는 상태 것이다 AppDelegate에의합니다 (하는 .m 또는 .H 파일 중 하나를) 이러한 데이터를 저장합니다.

여러 위치에서 데이터에 액세스해야하는 경우 일반적으로 Singleton 개체를 사용하는 것이 좋습니다. 싱글 톤은 여러 위치에서 동일한 데이터 소스에 대한 액세스를 허용하기 위해 객체의 단일 인스턴스 만 유지되는 객체 지향 개념입니다.

[StationDB 데이터베이스] .stationInfos가 이미 싱글 톤 (객체에 익숙하지 않음) 인 경우 필요에 따라 어디서나 액세스 할 수 있습니다. .h 또는 .m 파일에서 정의해야한다고하는 것은 없습니다. 필요한 경우에만 정의 할 수 있습니다.

일반 지침이 될 수 있습니다 다른 개체의 제한된 #이 액세스해야 할 수 있습니다

  • 은 >> .H에 정의합니다.
  • .m에서 정의 >> 해당 클래스 만 액세스해야하는 경우.
  • 특정 방법으로 정의 >> 해당 메서드 만 액세스해야하는 경우.
  • 싱글 톤으로 정의 >> 많은 개체가 액세스해야하는 경우.
  • Do not >> AppDelegate에서 정의하십시오. 적절한 모델, 뷰 또는 컨트롤러 클래스 파일에 논리를 배치하는 것이 가장 좋습니다.
1

변수를 .m 대신 .h로 설정합니다. 거기에서 ViewController.m 안에 AppDelegate.h를 가져와야합니다. 당신이 변수를 할 때

그런 다음을 수행하십시오

AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; 
variableType *stationInfos = appDelegate.stationInfos; 
+0

ViewController에서 appDelegate 변수를 메서드 전체에서 대리자의 메서드와 속성을 사용하면 해당 속성의 하나 인'self.delegate = [UIApplication sharedApplication] .delegate'로 저장하는 것이 좋습니다? –

+0

그렇게 할 수는 있지만 대리인이라고 부르지 마십시오. 일부 예약되었거나 문제가 발생할 수 있습니다. –

+0

특히, 두 개의 메소드 A와 B에서 appDelegate 객체를 사용하면 'viewDidLoad'에서 델리게이트 객체를 가져와야하나요? –

관련 문제