2015-02-06 4 views
0

변수 (var1)가 내 AppDelegate에서 설정됩니다. AppDelegate에서 변수를 가져 오려는 다른 클래스 인 MyClass가 있습니다. 나는 잘 MyClass에 정의 된 변수 (VAR2)을 설정할 수 있습니다다른 클래스의 변수에 액세스 하시겠습니까?

AppDelegate에 :

- (void)setVariable { 

    var1 = @"TEST"; 

    MyClass *setVar = [[MyClass alloc] init]; 
    setVar.var2 = var1; 
    NSLog(@"var2: %@",setVar.var2); // Outputs TEST 
} 

나는 그것이 널의 MyClass에있는 변수를 얻을려고 :

MyClass의를

- (void)getVariable { 

    AppDelegate *getVar = [[AppDelegate alloc] init]; 
    var2 = getVar.var1; 
    NSLog(@"var2: %@",var2); // Outputs NULL 
} 

[getVar setVariable];도 포함하면 작동하지만 정적 변수로 변수를 설정하기 때문에 원하는 작업이 정확하지 않습니다. AppDelegate에서 이전에 설정 한대로 변수를 가져 오려고합니다.

+1

화면에없고 즉시은 SetVariable 방법의 외출로 해제하게 될 것이다 MyClass에의 새로운 인스턴스를 생성합니다 같은

그래서 코드가 보일 것이다 범위. AppDelegate의 새 인스턴스를 만드는 것은 잘못입니다. 앱 대리자의 새 인스턴스를 만들어서는 안됩니다. Objective-C 프로그래밍에 대한 좋은 책을 얻고 객체를 이해하려고 노력해야한다. – rdelmar

+0

@rdelmar, 어떤 책을 추천 해 주시겠습니까? 나는 종종 좋은 책을 사라고 말하는 사람들을 보지만, 너무 많다. 특정 제목은 좋을 것입니다, 감사합니다. –

+0

잘 모르겠습니다. 내가 사용한 것들은 권하지 않습니다. 나는 Big Nerd Ranch에서 많은 사람들을 추천하는 것을 본다. 나는 또한 스탠포드 온라인 과정 인 CS193P (iOS 프로그래밍 전용)의 비디오를 좋아했습니다. – rdelmar

답변

0

앱 대리인의 새 인스턴스를 만드는 경우 업데이트 된 속성 값을 검색 할 수 없습니다. 당신은 디폴트만을 보게 될 것입니다.

[(AppDelegate *)[[UIApplication sharedApplication] delegate] var1]; 

사이드 참고 :

대신, 당신은 아마 당신이 당신의 응용 프로그램에 할당 한 응용 프로그램 대리자를 사용하려는 당신이 제공 한 소스 코드에 오타가 나타납니다. AppDelegate *getVar * [AppDelegate alloc] init];=[이 누락되었습니다.

+0

이것에 대한 하나의 질문으로, AppDelegate 대신에 다른 클래스가 있다면 어떻게 할 수 있을까요? '[(AppDelegate *)] '를 다른 클래스로 변경하려고 시도했을 때'인식 할 수없는 선택자 '가 나타납니다. –

+0

정말 다른 클래스 인스턴스를 어떻게 선언 했느냐에 달려 있습니다. 정적 메서드를 추가하여 클래스 자체의 값을 가져올 수 있습니다. 클래스의 공유 인스턴스를 검색하는 싱글 톤을 가질 수 있습니다. 클래스의 많은 인스턴스를 가질 수 있으며 조회 메소드를 사용하여 특정 클래스를 검색하려고 할 수 있습니다. 클래스의 인스턴스를 View Controller에 전달할 수 있습니다.귀하의 질문에 여러 가지 가능한 대답이 있으며 코드 아키텍처에서 아무도 추측 할 수 없습니다. –

+0

제공된 솔루션은 AppDelegate에만 해당되는 경우 훌륭하게 작동하므로 다른 클래스 (아마도 NSView)에서 작동하는 유사한 기능이 있다면 그 기능을 사용할 수 있습니다. 당신이 보여준 것처럼 변수 값을 잡는 것만으로는 아무 것도 없습니다. –

0

AppDelegate *getVar = [[AppDelegate alloc] init];을 수행하면 AppDelegate 클래스의 새 인스턴스를 만듭니다. 기본적으로 var1에 할당 된 값은 없습니다. 그래서 [getVar setVariable]; 번으로 전화하면 올바른 값을 출력합니다.

응용 프로그램에 위임 된 AppDelegate의 인스턴스에 setVariable을 이미 호출했다고 가정하고 AppDelegate의 인스턴스 인 (AppDelegate *)[[UIApplication sharedApplication] delegate];을 검색하여 시작할 수 있습니다. 응용 프로그램의 위임에 SETVAR 만들기

- (void)getVariable { 

    AppDelegate *getVar = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    var2 = getVar.var1; 
    NSLog(@"var2: %@",var2); 
} 
+0

'AppDelegate' 대신에 다른 클래스를 가졌어요. 어떻게 할 수 있을까요? '[(AppDelegate *)] '를 다른 클래스로 변경하려고 시도했을 때'인식 할 수없는 선택자 '가 나타납니다. –

+0

AppDelegate는 응용 프로그램 전체에서 공유되는 싱글 톤 (singleton-like) 클래스이므로'[[UIApplication sharedApplication] delegate]'를 통해 액세스 할 수 있습니다. 다른 클래스는 같은 방법으로 액세스 할 수 없습니다. 너 정확히 뭘 하려구? 'MyClass myObj = [[MyClass alloc] init];'를 사용하여 어딘가에 객체를 생성했다면 나중에 myObj.myProperty를 사용하여 해당 속성에 액세스 할 수 있습니다. 나는 당신이 달성하고자하는 것에 대한 더 많은 설명과 함께 이것에 대한 새로운 질문을 시작할 것을 제안합니다. – golddove

+0

'myObj.myNewProperty = myProperty'와 같은 다른 클래스의 값을 클래스에 설정하면 작동합니다. 하지만 클래스에서 myNewProperty에 액세스하려고하면 NULL로 설정됩니다. –

0
You are again creating another instance of AppDelegate which is already there in memory. 

You need to access the same same AppDelegate object what it was created at beginning of your app. 

You can access AppDelegate object and its property using following code. 


id appDelegate = [[UIApplication sharedApplication] delegate]; 

NSLog(@"[appDelegate valueForKey:var1]=%@",[appDelegate valueForKey:@"var1"]); 
관련 문제