有没有办法在不使用出口的情况下更新NSTextField标签的字符串值?



所以我是Cocoa和Objective-C编程的新手,但我已经阅读了足够的内容,能够几乎完全修改我正在做的这个程序,让我满意...除了一个特定的用例。

该程序允许用户手动指定他们希望下载的文件驻留位置的路径,然后通过将标签的值绑定到用户默认控制器,将其保存到用户默认字典中。然后,标签的字符串值通过附加到"在查找器中打开"按钮的IBAction(通过在按钮的IBAction中修改标签出口的字符串值(进行更新,每当用户单击按钮并选择新路径时,就会触发该按钮。

我的问题是,当需要下载文件时,如果用户选择的路径不再存在或无效,它将默认为用户的桌面。但是在这种情况下,我没有看到标签中反映桌面路径。这也是有道理的,因为在这种情况下没有代码可以直接修改标签的字符串值(无法从该文件访问标签的出口(。我一直在试图想出一个解决方案来解决这个一直困扰我的小问题,但我还没有找到一个有效的解决方案。任何建议或提示将非常受欢迎!我在下面包含了相关代码片段的片段。

"PreferencesController.m"
- (IBAction)onOpenDownloadsPath:(id)sender {
NSOpenPanel* panel = [NSOpenPanel openPanel];
[panel setCanChooseFiles:NO];
[panel setCanChooseDirectories:YES];
[panel setAllowsMultipleSelection:NO];

[panel beginWithCompletionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
NSURL*  theDir = [[panel URLs] objectAtIndex:0];
NSString* thePath = theDir.path;
[Preferences setDownloadsPath:thePath];
self->_labelDisplay.stringValue = [Preferences getDownloadsPath];
}
}];}

"Preferences.m"
+ (void)setDownloadsPath:(NSString *)value {
NSUserDefaults* ud = [NSUserDefaults standardUserDefaults];
[ud setObject:value forKey:@"Preferences.downloadsPath"];
}
+ (NSString*)getDownloadsPath {
NSUserDefaults* ud = [NSUserDefaults standardUserDefaults];
return [ud stringForKey:@"Preferences.downloadsPath"];
}

已解决。我使用 NSNotification 观察器/侦听器来侦听何时调用 set 函数,然后相应地更新标签中的 stringValue。

相关内容

最新更新