2009-08-27 1 views
3

내 응용 프로그램 대리인의 변수/propery를 전역 변수로 사용하고 있습니다. (싱글 톤 클래스를 다루고 싶지 않습니다.)응용 프로그램 대리인 변수/속성에 액세스하려고 시도했습니다.

#define 문을 응용 프로그램 대리인 클래스에 쓰려고합니다. 내가 입력 한 경우 :

[UIApplication sharedApplication] 

내 응용 프로그램 대리인 클래스에서 코드 힌트는 sharedApplication을 인식하지 못합니다. 그러나 viewController 클래스에 같은 것을 입력하면 "sharedApplication"이 바로 나타납니다. 내 applicationDelegate.h에 NSMutableDictionary를 정의 (? 또는하는 .m)하기 위해

, 나는 쓰기 : 다음

#define MyDictionary [[[UIApplication sharedApplication] delegate] stateDictionary] 

을 내가 다른 클래스에서 사용하려고하면 :

[[MyDictionary objectForKey:@"California"] largestCity]; 

MyDictionary를 먼저 선언해야한다는 오류가 발생합니다. 나는 여기에서 많은 개념에 관해 정말로 혼란 스럽다.

답변

8

나는 사람이 더 나은 답변을 것이라고 확신하지만, 여기에 빠른 하나 :

하는의 응용 프로그램이하여 MyApplication이라고 가정 해 봅시다. MyApplicationDelegate에 "글로벌"속성을 할당 한 다음 어디서든이 같은에서 액세스 할 수 있습니다 :

// get reference to app delegate 
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate] 

Property *myProperty = appDelegate.property; 

을 또한,이 헤더에 MyApplicationDelegate 파일을 사용하고 있는지 확인하십시오

#import "MyApplicationDelegate.h" 

더 이상 논쟁이있다 "전역"개체를 사용하는 것이 일반적으로 좋은 디자인이지만, 지금은 들어 가지 않을 것입니다.

+0

잘 작동합니다. 고맙습니다. 어쨌든 그것을 정의하여 2 문장을 사용하지 않고 변수에 액세스 할 수 있습니까? 내가 그들을 풀어야합니까? 내가 그들을 풀어 주면 사전의 내 AppDelegates 인스턴스를 해제하고 위임합니까? – Bryan

+0

또한 내 질문의 첫 번째 부분에서 두 appDelegates의 차이점은 무엇입니까? – Bryan

+0

불행히도이 두 줄을 사용해야합니다. 내가 아는 실제 전역 변수는 없지만 다시는 내 코드에서 사용하지 않습니다. :) 방출하기 : 당신이 그들을 창조 한 종류에서 풀어 놓으십시오. 예를 들어, MyApplicationDelegate에서 생성 한 경우 dealloc 메소드에서 해제하십시오. 응용 프로그램 위임 질문 : 새 stackoverflow 질문을 시작하십시오. :) 그것의 주제는 자신의 ... – Rudi

2

나는 항상 이와 같은 UIApplication에 카테고리를 추가 : I 유형에 대해 걱정할 필요가 없습니다이 방법은 모든 캐스트

@interface UIApplication (MyAppDelegate) 
+(MyAppDelegate*)sharedMyAppDelegate; 
@end 

. 종종이 카테고리를 MyAppDelegate 클래스와 동일한 파일에 정의하고 구현합니다. 그래서 이것은 헤더 #import 온통입니다. 모두 당신의 MyProject_Prefix.chp 파일에 추가 할 수 있습니다.

아키텍처가 올바르게 계층화되어 있으면 싱글 톤이 나쁘지 않습니다. (그렇다면 완전히 테스트 할 수 있습니다).