2013-01-14 4 views
4

간단한 탭 iOS 앱을 쓰고 있습니다. 자체보기 컨트롤러가있는 각각 3 개의 탭이 있습니다. 각 뷰 컨트롤러에서 나는 같은 이름의 변수 선언다른보기 컨트롤러에서 같은 이름의 변수

float nitriteLevel; 

을하지만 하나의 VC에 nitriteLevel의 값을 변경 할 때 그것은 또한 다른 사람 nitriteLevel의 값을 변경합니다. 내가 이해하고 있듯이, 이것은 서로 독립적이어야한다. & 관련이 없다. 나는 무엇을 잘못했을 것인가?

+3

실수로 전역 변수를 만들었습니까? –

+1

변수를 어떻게 선언합니까? 이렇게? '@property (nonatomic) float nitriteLevel;'? – MaxGabriel

+0

위와 같이 선언했으나 (* 속성 또는 비 원자가 없음) 인터페이스와 구현 사이에 선언되었습니다. 이것이 세계화 된 것인가? @implementation 내에서 동일한 동작을 시도해 보았습니다. (Objective-C에는 전역 변수가 없다고 생각 했었습니다.) – user1975122

답변

3

구현 섹션의 중간에 선언 하시겠습니까? 또는 @ ... @end 블록 밖에서도? 그렇다면 글로벌하게 만들었습니다. 오브젝티브 C 아래 개인 인스턴스 변수의 안시 C.

이 때문이 가능합니다 다음을 수행하십시오 MyClassName.h 파일 :

@interface MyClassName : ItsSuperclassName <SomeProtocol> { 
    float nitriteLevel; 
} 

// if you want it private then there is no need to declare a property. 

@end 

MyClasseName.m 파일 :

@implementation 

// These days there is no need to synthesize always each property. 
// They can be auto-synthesized. 
// However, it is not a property, cannot be synthesized and therefore there is no getter or setter. 

    -(void) someMehtod { 

     self->nitriteLevel = 0.0f; //This is how you access it. 
     float someValue2 = self->nitriteLevel; // That is fine. 

     self.nitriteLevel = 0.0f; // This does not even compile. 
     [self setNitriteLevel: 0.0f]; //Neither this works. 
     float someValue2 = self.nitriteLevel; // nope 
     float someValue3 = [self setNitriteLevel]; // no chance 

    } 
@end 

다음에 대해 100 % 긍정적 인 것은 아닙니다.이 변수 유형은 자동으로 초기화되지 않습니다. 이 시점에서 float nitriteLevel = 0.0f;을 사용할 수 없습니다. 초기화 메소드에서 초기화하는지 확인하십시오. stile에 따라 viewDidLoad에서 View Controller의 최신으로 초기화하십시오.

관련 문제