2014-04-30 5 views
0

공유 된 사용자 기본값이 표시되어 있거나 표시되지 않은 경우 체크 상자 작업을 기록하고 있습니다. 그 확인란을 선택하면 해당 확인란을 닫으려면 창을 설정하려면 노력하고 있어요. 그렇지 않은 경우 창이 나타납니다.Objective-c (Mac)가 창을 다시 열 수 없도록 함

if 및 else 문을 사용하여 NSButton의 IBAction을 설정하려고 시도했지만 실패했습니다. 이 작업을 수행하는 방법에 대한 생각이나 아이디어가 있습니까?

+0

당신을 돕기 위해 몇 가지 코드가 필요합니다. 기본 설정에 제대로 쓰고 있습니까? 'synchronize' 메소드를 호출해야합니다. 그렇지 않으면 실제로 변경 사항을 저장하지 않습니다. –

+0

@TejaswiYerukalapudi : 그가 'NSUserDefaultsController'와 Mac OS X에서의 바인딩을 사용한다면 반드시 코드가 필요하지는 않습니다. 또한, 수동으로'synchronize'를 호출 할 필요가 거의 없습니다. – NSGod

+0

@NSGod 변경 사항을 저장하고 있지만, 다음과 같은 기본값을 사용하고 있습니다 : https://dl.dropboxusercontent.com/u/3783094/Screenshot%202014- 04-30 % 2013.29.19.png –

답변

0

표시하거나 숨겨야하는 창의 nib 파일에는 "시작시 표시"할 창 속성에 대한 확인란이 있습니다. 기본적으로 플래그가 설정되어 있으면 nib 파일이로드 될 때 자동으로 창이 표시됩니다.

실행시 해당 창을 표시할지 여부를 선택하려면 "시작시 표시"확인란의 선택을 취소하여 여유있게 표시하도록 선택할 수 있습니다.

내가하는 일은 다음과 같습니다. tourWindow이 투어 창에 대해 IBOutlet이라고 가정하면 해당 창에 대한 "실행시 보임"속성의 선택을 취소하십시오. 만약 shouldRunCl이 사실이라면, 윈도우가 보여야한다고 생각하니? 체크 박스에 "다시 열지 못하게 함"이라는 문구가 표시되므로 체크 박스의 값을 values.shouldRunClNSNegateBoolean 값 변환기로 바인딩해야합니다. 그런 다음 컨트롤러 클래스에서 다음을 수행합니다

@implementation MDAppController 

+ (void)initialize { 
    NSMutableDictionary *defaults = [NSMutableDictionary dictionary]; 
    [defaults setObject:@(YES) forKey:@"shouldRunCl"]; 
    [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; 
    [[NSUserDefaultsController sharedUserDefaultsController] 
            setInitialValues:defaults]; 
} 


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    if ([[[NSUserDefaults standardUserDefaults] 
        objectForKey:@"shouldRunCl"] boolValue]) { 
     [self.tourWindow makeKeyAndOrderFront:nil]; 
    } 
} 

@end 

+initialize 코드의 첫 번째 줄 NSUserDefaults에 대한 기본 값과 NSUserDefaultsController의 초기 값을 설정합니다. 즉, 나중에 코드에서 [[NSUserDefaults standardUserDefaults] objectForKey:@"shouldRunCl"]을 호출 할 때 항상 존재하는 값에 의지 할 수 있음을 의미합니다. 여기에 yes로 설정하면 기본값 만 설정되며 확인란을 클릭하면 사용자가 해당 값을 변경하지 못하게됩니다 (따라서 "사용자 기본값"이라는 이름).

applicationDidFinishLaunching:을 선택하여 창을 표시하는 코드를 구현하는 동안 awakeFromNib 또는 willFinishLaunching을 입력 할 수도 있습니다. 코드는 shouldRunCl == YES인지 확인하고, 그렇다면 tourWindow을 표시합니다.

체크 박스에 IBAction을 설정할 필요가 없습니다. 사용자가 클릭하면 shouldRunCl의 기본값이 변경 (재 지정)되고 다음 실행을 위해 지속됩니다.

+0

아 ~ 그래 무슨 일이 일어나는 지 알 겠어. 기본적으로 사용자 기본값은 창이 열려 있는지 여부에 따라 다릅니다. 지금까지 내가 가진 것을 당신과 함께 나눌 수 있을까요? 모든 것이 컴파일되지만 창을 닫을 수는 없습니다. –