2011-04-10 6 views
0

iOS @ getter와 setter에 대해 약간 혼란 스럽습니다. 프로젝트의 모든 클래스에서 사용할 수 있도록 다른 클래스의 AppDelegate.h 파일에 NSString iVar을 설정하려고합니다.iOS Getter and Setter confuch

예를 들어, AppDelegate.h에 iVar NSString * currentUser를 저장하는 iPhone 프로젝트에서 작업하고 있습니다. 나는 이것을 ViewController.m의 한 메소드를 통해 설정하고 두 번째 ViewController의 다른 메소드를 통해 가져올 수 있어야한다.

게터와 세터가 함께 공격의 방향이 잘못되었을 수 있습니까? iVar는 해당 개체에만 존재하고 모든 클래스의 모든 개체에 액세스 할 수 있기를 원하기 때문에 AppDelegate를 할당하지 않으려 고합니다.

나를 똑바로 세워주십시오.

모든 최고의, 대런

+0

싱글 톤을 사용하는 것이 해결책 일 수 있습니다. 너 그거 해봤 니? (비록 내가 해결책으로 싱글 톤을 사용하는 것을 좋아하지 않는 소수의 사람들을 알고있다.) –

+1

애플 리케이션 델리게이트는 효과적으로 싱글 톤으로 행동한다. 일반적으로 오직 하나의 인스턴스 만 플레이되며 UIApplication 싱글 톤을 통해 어디에서나 액세스 할 수 있습니다. 싱글 톤을 치지 않고 아이폰 OS에서 죽은 고양이를 스윙 할 수 없다. –

+0

나는 싱글 톤을보고 더 간단한 방법이있을 거라고 생각했다. 나는 App 대리인을 사용하는 Bill의 솔루션을 좋아한다. 이제 제대로 작동하도록해야합니다. – EcksMedia

답변

1

다음은 애플 대리자에 대한 설정입니다.

@interface AppDelegate 
{ 
    NSString *__currentUser; 
} 
@property (monatomic, copy) NSString* currentUser; 
@end 

@implementation AppDelegate 
@synthesize currentUser = __currentUser; 

- (void) dealloc 
{ 
    [__currentUser release]; 
    [super dealloc]; 
} 
@end 

하나의보기 컨트롤러에서 현재 사용자의 값을 설정할 수 있으며 후속보기 컨트롤러에서 일부 사기 목적으로 값을 가져올 수 있습니다.

@implementation LoginController 
- (void) viewDidLoad 
{ 
    ... 
    AppDelegate *bob = [[UIApplication sharedApplication] delegate]; 
    [bob setCurrentUser: @"Jim Kirk"]; 
    ... 
} 
@end 

나중에 표시되는 다른보기 컨트롤러에서는 현재 사용자의 값에 액세스 할 수 있습니다.

@implementation ProfileViewController 
- (void) viewDidLoad 
{ 
    ... 
    AppDelegate *bob = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
    NSString * user = [bob currentUser]; 

    // insert nefarious purpose for current user value here 
    ... 
} 
@end 
+0

안녕하세요 고마워요 빌이 막 거기에있어. 거기에 정말 편리한 지식. 변수를 아무 문제없이 설정하는 코드가 생겼지 만 코드가 Var에 액세스하는 데 좀 더 자세히 설명 할 수 있는지 궁금합니다. – EcksMedia

+0

AppDelegate *로 캐스트 할 내 대답이 업데이트되었습니다. 값이 AppDelegate 유형의 지역 변수에 지정되기 때문에 실제로 캐스트가 필요하지 않을 수도 있습니다. 거기에 가지고있는 어떤 것도 다치게하지 않을 것입니다. 긴 UIApplication 주문에 대한 일반적인 해결책은 접두어 헤더 파일에 매크로를 작성하는 것입니다. #define APP_DELEGATE = (AppDelegate *) [[UIApplication sharedApplication] delegate], 필요할 때마다 APP_DELEGATE를 사용하십시오. 예 : [APP_DELEGATE currentUser]; –

+0

빌의 코드 덕분에 나는 지금 일하는 마지막 부분을 얻었다. 대체 됨 NSString * user = [[UIApplication sharedApplication] delegate] currentUser]; 다음을 사용하십시오. AppDelegate * user = [[UIApplication sharedApplication] delegate]; NSString * currentUser = user.currentUser; // 그냥 작동하는지 확인하려면 NSLog (@ "현재 사용자 : % @", currentUser); 감사합니다. 내 질문에 대한 답변입니다. 나는 Getters와 세터를 올바른 방식으로보고 있지 않았습니다. – EcksMedia

관련 문제