2012-04-24 2 views
0

그래서 클래스 (TrackViewController)의 변수를 한 번만 초기화하려고했습니다. 데이터베이스에서 삽입 된 ID를 viewcontroller에 알려주기 위해 수행됩니다. 요컨대클래스 변수를 한 번만 초기화하십시오 - objective-C

:

I는 NSNotificationCenter 통해 위치 업데이트를 수신하는 TrackManager있다. TrackViewController는 버튼을 클릭 할 때 startTracking 메서드를 사용합니다. 이 기능은 내 TrackManager에서 설정되고 데이터베이스에 새로 삽입 된 행의 ID를 반환합니다.

이 ID는 TrackViewController에서 유지해야 응용 프로그램의 기본 화면으로 돌아가서 TrackViewController로 돌아갈 때이 ID를 여전히 알 수 있습니다. stopTrack : (long) trackID 메소드를 호출하여 해당 트랙의 위치 추적을 중지하고 데이터베이스 열 "TrackFinished"를 완료하도록 설정해야합니다.

정적 변수를 사용하여이 문제를 해결할 수 있다고 생각했지만 차라리 그렇지 않았습니다.

변수를 한 번만 TrackViewController에서 초기화하는 방법이 있습니까? awakeFromNib, ViewDidLoad 등을 시도했지만 TrackViewController 화면이 나타날 때마다 이러한 메서드가 호출됩니다. 사전

+0

당신이 initWithCoder 및 initWithFrame를 시도 :

static dispatch_once_t pred; static NSObject *shared = nil; dispatch_once(&pred, ^{ shared = [[NSObject alloc] init]; }); 

또 다른 방법은 변수가 이미 할당되어 있는지 여부를 확인하는 것입니다? – jrtc27

+0

initWithCoder를 확인하십시오. 이것으로 해결할 수 있습니다. 너에게 다시 돌아갈 게. – Tikkes

+0

NIB/XIB에서 초기화 될 때 initWithCoder가 호출되고 NIB/XIB없이 초기화 될 때 initWithFrame이 호출되므로 동일한 작업을 복사하여 다른 것으로 붙여 넣어야합니다. – jrtc27

답변

1

에서

많은 감사 당신의 viewDidLoad 방법, 또는 initMethod이 뭔가를 넣어보십시오. 물론 NSObject를 당신의 변수가 어떤 타입으로 바꾸어도 마찬가지입니다.

if (!variable) 
    variable = [[NSObject alloc] init]; 
+0

이것은 정적 변수를 사용하고 있습니다. – Tikkes

+0

비 정적 변수로 바꿉니다. 방금 프로젝트 중 하나에서이 예제를 가져 왔습니다. – danielbeard

+0

로컬 변수를 사용할 경우 항상 실행됩니다. 인스턴스 변수를 사용하는 경우 인스턴스 당 한 번 실행됩니다. 하지만 정적 변수없이 요청한 것처럼 클래스 당 한 번 실행되도록 할 수있는 방법이 없습니다. – Jesper