当我创建一个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
时,它是正确的并且打印我的文件完整目录,但是当我尝试将它与我的虚空一起使用时,它变得像超级奇怪的字母,如ÿ^ 0f完全随机。为什么呢?
答案 0 :(得分:12)
该代码没有任何问题。实际上,有许多事情对于该代码并不理想,但没有任何东西会使它无效。 decompresss2z:function看起来像什么?
如果这是我的代码,我会做出以下更改:
runModalForDirectory:file:
已弃用;你应该使用runModal
代替。filenames
已弃用;您应该使用URLs
代替(您可以在每个网址上调用path
来获取文件名)。NSLog
的参数需要是一个格式字符串,否则就会发生奇怪的事情。in
关键字),而不是使用索引循环容器。它不仅更高效,而且代码更少(代码更少)。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:看起来像什么。