공유 된 사용자 기본값이 표시되어 있거나 표시되지 않은 경우 체크 상자 작업을 기록하고 있습니다. 그 확인란을 선택하면 해당 확인란을 닫으려면 창을 설정하려면 노력하고 있어요. 그렇지 않은 경우 창이 나타납니다.Objective-c (Mac)가 창을 다시 열 수 없도록 함
if 및 else 문을 사용하여 NSButton의 IBAction을 설정하려고 시도했지만 실패했습니다. 이 작업을 수행하는 방법에 대한 생각이나 아이디어가 있습니까?
공유 된 사용자 기본값이 표시되어 있거나 표시되지 않은 경우 체크 상자 작업을 기록하고 있습니다. 그 확인란을 선택하면 해당 확인란을 닫으려면 창을 설정하려면 노력하고 있어요. 그렇지 않은 경우 창이 나타납니다.Objective-c (Mac)가 창을 다시 열 수 없도록 함
if 및 else 문을 사용하여 NSButton의 IBAction을 설정하려고 시도했지만 실패했습니다. 이 작업을 수행하는 방법에 대한 생각이나 아이디어가 있습니까?
표시하거나 숨겨야하는 창의 nib 파일에는 "시작시 표시"할 창 속성에 대한 확인란이 있습니다. 기본적으로 플래그가 설정되어 있으면 nib 파일이로드 될 때 자동으로 창이 표시됩니다.
실행시 해당 창을 표시할지 여부를 선택하려면 "시작시 표시"확인란의 선택을 취소하여 여유있게 표시하도록 선택할 수 있습니다.
내가하는 일은 다음과 같습니다. tourWindow
이 투어 창에 대해 IBOutlet
이라고 가정하면 해당 창에 대한 "실행시 보임"속성의 선택을 취소하십시오. 만약 shouldRunCl
이 사실이라면, 윈도우가 보여야한다고 생각하니? 체크 박스에 "다시 열지 못하게 함"이라는 문구가 표시되므로 체크 박스의 값을 values.shouldRunCl
에 NSNegateBoolean
값 변환기로 바인딩해야합니다. 그런 다음 컨트롤러 클래스에서 다음을 수행합니다
@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
의 기본값이 변경 (재 지정)되고 다음 실행을 위해 지속됩니다.
아 ~ 그래 무슨 일이 일어나는 지 알 겠어. 기본적으로 사용자 기본값은 창이 열려 있는지 여부에 따라 다릅니다. 지금까지 내가 가진 것을 당신과 함께 나눌 수 있을까요? 모든 것이 컴파일되지만 창을 닫을 수는 없습니다. –
당신을 돕기 위해 몇 가지 코드가 필요합니다. 기본 설정에 제대로 쓰고 있습니까? 'synchronize' 메소드를 호출해야합니다. 그렇지 않으면 실제로 변경 사항을 저장하지 않습니다. –
@TejaswiYerukalapudi : 그가 'NSUserDefaultsController'와 Mac OS X에서의 바인딩을 사용한다면 반드시 코드가 필요하지는 않습니다. 또한, 수동으로'synchronize'를 호출 할 필요가 거의 없습니다. – NSGod
@NSGod 변경 사항을 저장하고 있지만, 다음과 같은 기본값을 사용하고 있습니다 : https://dl.dropboxusercontent.com/u/3783094/Screenshot%202014- 04-30 % 2013.29.19.png –