2012-08-07 3 views
2

하나의 viewcontroller에서 다른 변수로 값을 접근하기 위해 전역 변수를 사용하고 있습니다. viewdidload에서 전역 변수를 호출하는 문제는 null을 반환하지만, (ibaction) 그것은 정상적으로 작동합니다.코코아 xcode 4.3 전역 변수

+1

했나 귀? – Vaquita

+0

@Jayashankar, 그것이 ViewDidAppear에서 일한 팁에 대해 고맙습니다. – shakyeb

답변

1

문제는 평가 순서와 관련이 있습니다. 문제의 변수가 viewDidLoad:의 시간에 초기화되지 않았지만 작업이 실행될 때까지 초기화가 완료되었습니다.

나중에 viewDidLoad:보다 나중에 발생하는 다른 콜백에서 전역에 액세스하여 타이밍을 조정할 수 있지만 문제를 방지하려면 전역 변수 대신 글로벌 싱글 톤을 사용할 수 있습니다.

헤더 :

@interface Globals 
+(MyGlobal*)global; 
@end 
당신이 당신의 글로벌 상태를 유지하는 별도의 클래스를 확인,이 같은 글로벌 변수에 액세스하는 데 사용하고, 해당 클래스 메소드를 호출해야하는 장소에서의 헤더를 포함

구현 :

@implementation Globals 
+(MyGlobal*)global { 
    static MyGlobal* _global; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     _global = [[MyGlobal alloc] init]; 
    }); 
    return _global; 
} 
@end 

사용법 : 당신은 ViewDidApp에서 그것을 액세서하려고

MyGlobal *g = [Globals global];