gpt4 book ai didi

objective-c - NSOpenPanel 在 Objective-C 中获取文件名?

转载 作者:行者123 更新时间:2023-12-05 08:21:15 27 4
gpt4 key购买 nike

当我创建一个 NSOpenPanel 时,像这样:

int i;

NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:YES];

if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton)
{
NSArray* files = [openDlg filenames];

for( i = 0; i < [files count]; i++ )
{
NSString* fileName = [files objectAtIndex:i];
NSLog(fileName);
NSString *catched = fileName;
[self performSelector:@selector(decompresss2z:) withObject:catched];
}
}

当我登录 fileName 时,它是正确的并打印我的文件完整目录,但是当我尝试将它与我的 void 一起使用时,它变得像 super 奇怪的字母,如 ÿ^0f 完全随机.为什么?

最佳答案

这段代码没有任何问题。实际上,该代码有许多不尽如人意的地方,但不会使其无法运行。 decompresss2z: 函数是什么样的?

如果这是我的代码,我会进行以下更改:

  1. runModalForDirectory:file: 已弃用;您应该改用 runModal
  2. filenames 已弃用;您应该改用 URLs(您可以在每个 URL 上调用 path 以获取文件名)。
  3. NSLog 的参数需要是格式字符串,否则会发生奇怪的事情。
  4. 您应该使用快速枚举(使用 in 关键字),而不是使用索引遍历容器。它不仅效率更高,而且代码更少(代码越少越好)。
  5. 没有理由在这里调用performSelector:withObject:;只需正常调用方法即可。

重写后,它看起来像这样:

NSOpenPanel* openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseFiles:YES];
[openDlg setCanChooseDirectories:YES];

if ( [openDlg runModal] == NSOKButton ) // See #1
{
for( NSURL* URL in [openDlg URLs] ) // See #2, #4
{
NSLog( @"%@", [URL path] ); // See #3
[self decompresss2z:[URL path]]; // See #5
}
}

不过,这些更改都不会改变您的实际问题。为了进一步提供帮助,我们需要查看更多代码。具体来说,我想看看 decompressss2z: 是什么样子。

关于objective-c - NSOpenPanel 在 Objective-C 中获取文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815784/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com