2010-04-03 3 views
1

다른 뷰에서 호출 된 전역 변수를 정의했으며 처음에는 작동하지만 그 다음에는 작동하지 않는 전역 변수를 정의 했으므로 첫 번째 호출에서 값을 유지합니다! 그것이 코코아 근본 문제이고 변수가 필요에 따라 적절하게 정의되지 않는다고 가정합니다. 이 문제를 해결해 주셔서 감사합니다.처음 만 작동하는 글로벌 변수 호출

선언 :

@interface TableArchiveAppDelegate : NSObject <UIAppDelegate> { 

    NSString  *varName; 
} 

@property (nonatomic, copy) NSString *varName; 

하는 .m 파일에 관련된 다음 라인 :

@synthesize varName; 

-(void)test{ 

     varName = textField.text; 
} 

다른 관점에서 요청 :

- (void)viewDidLoad { 


    TableArchiveAppDelegate *mainDelegate = (TableArchiveAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    name.text = mainDelegate.varName; 

    [super viewDidLoad]; 
} 
+0

문제가 무엇인지 명확하지 않습니다. 아마도 보려는 값과 보려는 값은 물론 실제로 본 값을 제공 할 수 있습니다. – TechZen

+0

Ruthy :'varName'은 여기에 전역 변수가 아닙니다; 당신은 하나의 인스턴스 변수와 다른 하나의 속성 인, 여러분의 응용 프로그램 델리게이트에있는'varName'이라는 이름을 가지고 있습니다. –

답변

1

질문을 이해할 수 있지만 제시된 코드는 메서드가 호출되었을 때 varFrame 속성이 textField.text에서 설정된 값을 유지하도록합니다. 다른 값을 할당하지 않으면 초기 값을 영원히 유지합니다.

합성 된 접근자를 사용하지 않는 것이 문제 일 수 있습니다.

이 :

@property (nonatomic, copy) NSString *varName; 

작업 ... 접근 합성 생성을 복사는 NSString 다른 인스턴스를 생성하고있는 NSString 패스의 값으로 채우는 의해 전달 된 오브젝트는 NSString. 그러나,이 :

varName = textField.text; 

... 는 textField.text 할에서 개최 된 문자열의 주소 변수 varName를 할당합니다. 아무것도 복사되지 않습니다. 두 개의 iVars가 동일한 주소에서 동일한 문자열 값을 공유하기 때문에 textField.text가 변경되면 varName도 변경됩니다. 또한 textField.text가 문자열을 해제하면 varName에서도 사라집니다.

self.varName = textField.text; 

이 ... 그 안에 복사 기능이 합성 된 액세스 방법을 연상하기 :

는 사용할 필요가 textField.text 할의 문자열을 복사합니다.

일반적으로 클래스 자체 속성을 참조 할 때는 항상 self. 표기법을 사용하여 올바르게 보존/복사/릴리스되도록해야합니다. 물론 사용자 정의 접근자를 작성하는 경우는 예외입니다.

+0

TechZen, self.varName이 해결책이었습니다! 나는 정말로 당신의지지와 분명한 계단에 감사한다 !! – Ruthy