2011-02-06 8 views
0

내 NSStatusBar의 제목을 다른 환경 설정 클래스에서 변경하려고합니다. 내가NSStatusBar 제목을 다른 클래스에서 설정 하시겠습니까?

- (NSStatusItem *)statusItem { return statusItem; } 

내가 다음 내 preferences.m 내 ManagerClass.h을 가져 선언 한 .H 내 ManagerClass.m &에서

preferences.m 내부에 다음

나는 실행하려고 :

ManagerClass *someInstanceToIt = [[ManagerClass alloc] init]; 
[(NSStatusItem *)[someInstanceToIt statusItem] setTitle:@"New Title"]; 

하지만 statusItem이 비어 있음을 볼 수있는 경우 statusItem이 preferences.m 파일로 전달되지 않습니다.

아이디어가 있으십니까? 완전히 갇혔어요

답변

1

[[ManagerClass alloc] init]을 사용할 때 새 인스턴스를 만듭니다. 이전에 생성 한 객체가 필요하며 새로운 객체는 필요하지 않습니다.

문제를 해결하는 방법은 다음과 같습니다. - 첫 번째 해결 방법은 생성 된 ManagerClass 인스턴스를 전달하고이를 기본 설정 컨트롤러로 전달하는 것입니다. 그러나이 경우에는 변수에 ManagerClass 인스턴스를 계속 보관해야합니다. 느슨해지지 않도록하십시오. - 또 다른 방법은 싱글 톤 디자인을 구현하는 것입니다. 즉, 전체 응용 프로그램에서 하나의 공유 객체를 가질 수 있습니다. 예는 아래에서 확인할 수 있습니다

@implementation aClass 
- (id)init { 
    self = [super init]; 
    if(self != nil) { 
    } 
    return self; 
} 

+ (id)sharedInstance { // note the + for a class method 
    static id shared = nil; 
    if(shared == nil) { 
     shared = [[self alloc] init]; 
    } 
    return shared; 
} 
@end 

지금 같은 객체에게 당신이 그것을 호출 할 때마다받을이 코드를 호출 할 수 있습니다

aClass *sharedObject = [aClass sharedInstance]; 

는 희망이 도움을 ief2

0

첫째, someInstanceToIt은 인스턴스 변수 여야하므로 상태 항목이 필요한 한이 인스턴스를 소유 할 수 있습니다.

두 번째로 -[ManagerClass init]을 구현하여 NSStatusItem을 만들고이를 ManagerClass 인스턴스의 statusItem 인스턴스 변수에 저장해야합니다. statusItem에는 그 때까지 nil이 포함됩니다.

세 번째로, "ManagerClass"는 클래스에 매우 적합한 이름이 아닙니다. 위에서 "ManagerClass 인스턴스"를 어떻게 말했는지 주목하십시오. 대신 "StatusItemManager"를 제안합니다. 그 변화로 "StatusItemManager의 인스턴스 변수"라고 말할 수있었습니다.

관련 문제