2013-02-01 1 views
0

Appdelegate에 전역 변수가 정의되어 있습니다. 다른 컨트롤러에서 사용하고 싶습니다. 그리고는 다음과 같이 사용할 수 있습니다AppDelegate를 전역 적으로 선언하십시오.

AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; 
    appdelegate.name=[NSString stringwithFormat:@"%@",ename]; 

를하지만의 ViewController에 appdelegates 변수에 액세스 할 whereever 내가 AppDelegate *appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; 같은 경고 메시지를 제공 할 때마다 사용해야하는 'AppDelgate의 지역 선언이 숨 깁니다 인스턴스 변수'낭포가있다 한 번만 모든 ViewController에서 액세스 할 수있는 방법을 선언 할 수있는 방법.이 경고는 어떻게 제거 할 수 있습니까?

편집 :

.h : 
#import "AppDelegate.h" 

@interface More : UIViewController 
{ 

    AppDelegate *appdelegate; 
} 
.m: 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    appDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; //error :Use of undeclared identifier appDelegate 



} 
+0

그냥 AppDelegate * appDelegate를 선언하십시오. .h 파일에서. 다음 viewdidload 그냥 쓰기 appDelegate = (AppDelegate *) [[UIApplication sharedApplication] 대리인]; 전체 파일에서 appDelegate에 액세스 할 수 있습니다. –

+0

viewDidLoad에서 할 때 알 수없는 식별자 appDelegate 오류 사용 – Sindhia

+0

경고가 표시되면 코드에 심각한 문제가있는 것입니다. 관련된 코드의 비트와'AppDelegate'가 선언 된 헤더 파일을 게시하십시오. – trojanfoe

답변

0

문제는 단지 경고 인 경우, AppDelegate에 포인터의 로컬 이름을 변경, 그 내용은

AppDelegate *myLocalPointerToAppDelegate=(AppDelegate *)[[UIApplication sharedApplication]delegate]; 
    myLocalPointerToAppDelegate.name=[NSString stringwithFormat:@"%@",ename]; 
+0

내가 쓸 줄 몰라. AppDelegate * myLocalPointerToAppDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; 인스턴스 이름이 무엇이든 매번. appdelegate.name = [NSString stringwithFormat : @ "% @", ename]; AppDelegate * myLocalPointerToAppDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate] ; 한 번만 선언하면됩니다. – Sindhia

+0

@Sindhia 필요할 때마다 새 세션을 만들어야합니다. –

0

클래스에서 하나의 방법을 만들 수있는 AppDelegate의 개체를 사용하고 싶습니다.

-(AppDelegate *)appdelegate 
{ 
    (AppDelegate *)[[UIApplication sharedApplication]delegate]; 
} 

그리고 나서, 요 그 클래스에서 AppDelegate의 객체를 사용하고 싶다면, [self appdelegate].name처럼 사용할 수 있습니다.

1

의 Appdelegate make 방법.

+(AppDelegate*)sharedInstance 
{ 
    return (AppDelegate*)[[UIApplication sharedApplication] delegate]; 
} 

은 당신의 컨트롤러 헤더 파일에 AppDelegate에 가져 어쩌면이 당신을 도울 것입니다

[AppDelegate sharedInstance]. name = [NSString stringwithFormat:@"%@",ename];; 

를 사용합니다.

0

아니면 다음 모든 컨트롤러에 사용할 수 PLIST 파일에 AppDelegate에 개체를 만들 수 있습니다 ... 당신이 편집에서 주신 게시 된 코드에서

1

, 문제가 방금 AppDelegate에 선언 된 것 같다 * appdelegate; .h

및 .m에서 "appdelegate"대신 "appDelegate"를 사용했습니다.

명확하게 정의되지 않은 변수가 아닙니까?

0

아주 나쁜 스타일 : 인스턴스 변수는 항상 밑줄로 시작해야합니다. 예 : _appDelegate. 인스턴스 메소드 내부에서 인스턴스 변수의 이름을 사용하면 자동으로 self->를 참조합니다. 예를 들어 인스턴스 변수가 "appDelegate"인 경우 "appDelegate"를 작성하면 실제로는 self-> appDelegate를 의미합니다. 그래서 경고 메시지가 나타납니다. appDelegate라는 변수를 사용하면 소스 코드에서 "appDelegate"를 사용하면 더 이상 인스턴스 변수가 아닌 로컬 변수를 참조하게됩니다. 그것은 문제를 요구하고있다. ("문제 제기하기"는 "숙련 된 프로그래머가 조만간 수정이 불가능한 버그로 이어질 것이라고 말합니다")를 의미합니다. 변수를 추가하면 여러 줄의 코드의 의미가 변경되었을 가능성이 있습니다. 모든 인스턴스 변수 앞에 밑줄을 붙이면이 문제가 해결됩니다.

그게 바로 컴파일러가 경고하는 이유입니다. 컴파일러는 여러분이 결국 여러분이 결국 들어갈 구멍을 파 냈다는 것을 알아 냈습니다.

[[UIApplication sharedApplication] delegate]를 호출하여 appDelegate를 얻어야하기 때문에 appDelegate 또는 _appDelegate라는 인스턴스 변수가 있다는 것은 꽤 이상합니다.