Cocoa 返回标签上的文件名?

Cocoa 返回标签上的文件名?,cocoa,file,return,filenames,Cocoa,File,Return,Filenames,我正在开发一个加密工具,我有一个文件选择器,用户可以进入其中选择要加密的文件。我的问题相当简单。用户单击文件选择器中的“选择”按钮后,文件名必须返回到应用程序上的标签。问题是,我无法进入包含选择按钮以连接iAction的窗口。在用户单击“选择”后,如何将文件名返回到该标签?也许有人能上传能做到这一点的代码吗?我现在有点傻,所以请简单地说。。。如能逐步指导,将不胜感激 非常感谢 以下是文件选择器的代码: - (IBAction)fileChooser:(id)sender { int i; NSO

我正在开发一个加密工具,我有一个文件选择器,用户可以进入其中选择要加密的文件。我的问题相当简单。用户单击文件选择器中的“选择”按钮后,文件名必须返回到应用程序上的标签。问题是,我无法进入包含选择按钮以连接iAction的窗口。在用户单击“选择”后,如何将文件名返回到该标签?也许有人能上传能做到这一点的代码吗?我现在有点傻,所以请简单地说。。。如能逐步指导,将不胜感激

非常感谢

以下是文件选择器的代码:

- (IBAction)fileChooser:(id)sender {
int i;
NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:YES];
[openDlg setPrompt:@"Select"];
if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton )
{
    NSArray* files = [openDlg filenames];
    for( i = 0; i < [files count]; i++ )
    {
        [files objectAtIndex:i];

    }

}
-(iAction)文件选择器:(id)发件人{
int i;
NSOpenPanel*openDlg=[NSOpenPanel-openPanel];
[openDlg setCanChooseFiles:是];
[openDlg SetCanChoosedDirectories:是];
[openDlg setPrompt:@“选择”];
if([openDlg runModalForDirectory:nil file:nil]==NSOKButton)
{
NSArray*文件=[openDlg文件名];
对于(i=0;i<[文件计数];i++)
{
[文件对象索引:i];
}
}

}“将文件名返回到该标签”没有意义。函数或方法只向调用它的函数或方法返回值;这是C和Objective-C中“return”的唯一含义。此外,当函数或方法返回时,它就结束了。它不再运行了。它将程序的控制权返回给调用它的函数或方法

因此,从循环返回值在这里没有意义(该方法将只处理第一个文件名),而将值“返回到[对象]”没有意义

您需要在实现
fileChooser:
的类中创建字段的出口(标签是一种NSTextField),并在nib编辑器中连接该出口。然后,您可以使用该出口通知字段设置其
stringValue

(重要提示:与Cocoa Touch不同,大多数AppKit类不使用形式属性。您必须向字段发送
setStringValue:
消息。)

插座包含在中,您可以在中找到NSTextField文档

还有一件事:由于用户选择多个文件是可能的,而且非常合理,因此您应该处理这种情况。只需依次将文本字段的字符串值设置为每个文件名,它将只显示数组中的最后一个文件名,这与将其设置为第一个文件名并返回没有太大区别。一旦文本字段正常工作,就应该用表视图替换它


另一方面,如果您不想支持多个文件,那么(1)为什么?以及(2)考虑设置打开的面板以禁止多个选择。(请参阅我对上一个问题的回答,以获取该方向的文档参考。)然后,您可以假设,当响应为“OK”时,filenames数组正好包含一个项,并完全删除循环。

“将文件名返回到该标签”没有意义。函数或方法只向调用它的函数或方法返回值;这是C和Objective-C中“return”的唯一含义。此外,当函数或方法返回时,它就结束了。它不再运行了。它将程序的控制权返回给调用它的函数或方法

因此,从循环返回值在这里没有意义(该方法将只处理第一个文件名),而将值“返回到[对象]”没有意义

您需要在实现
fileChooser:
的类中创建字段的出口(标签是一种NSTextField),并在nib编辑器中连接该出口。然后,您可以使用该出口通知字段设置其
stringValue

(重要提示:与Cocoa Touch不同,大多数AppKit类不使用形式属性。您必须向字段发送
setStringValue:
消息。)

插座包含在中,您可以在中找到NSTextField文档

还有一件事:由于用户选择多个文件是可能的,而且非常合理,因此您应该处理这种情况。只需依次将文本字段的字符串值设置为每个文件名,它将只显示数组中的最后一个文件名,这与将其设置为第一个文件名并返回没有太大区别。一旦文本字段正常工作,就应该用表视图替换它


另一方面,如果您不想支持多个文件,那么(1)为什么?以及(2)考虑设置打开的面板以禁止多个选择。(关于这个方向的文档参考,请参见我对上一个问题的回答。)然后,您可以假设,当响应为“OK”时,filenames数组正好包含一个项,并完全切断循环。

您所说的“我无法进入包含选择按钮以连接iAction的窗口”是什么意思,我注意到,代码似乎没有改变,因为你的上一个问题:“我无法进入包含选择按钮以连接iAction的窗口”是什么意思,我注意到,代码似乎没有发生变化,因为您提出了上一个问题:因此,您要说的是将IBOutlet连接到最终将具有文件名的UILabel,并且在包含文件选择器实现的iAction方法中,我还应该将stringValue设置为文件的特定名称?什么UILabel?UILabel是UIKit的一部分,UIKit是Cocoa Touch的一部分。如果这是一个Cocoa应用程序(正如您使用开放面板所暗示的那样),那么您使用的是AppKit(NSOpenPanel是其中的一部分),因此“标签”是一个文本字段和一个NSTextField。否则,是的。对不起,是的,我是指文本字段。这绝对是一个cocoa应用程序。因此,我在包含fileChooser的iAction中添加了以下内容: