NSOpenPanel是否在Objective-C中获取文件名?
当我创建NSOpenPanel时,如下所示:NSOpenPanel是否在Objective-C中获取文件名?,objective-c,xcode,selector,ziparchive,Objective C,Xcode,Selector,Ziparchive,当我创建NSOpenPanel时,如下所示: int i; NSOpenPanel* openDlg = [NSOpenPanel openPanel]; [openDlg setCanChooseFiles:YES]; [openDlg setCanChooseDirectories:YES]; if ([openDlg runModalForDirectory:nil file:nil] == NSOKButton) { NSArray* files = [openDlg fil
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];
}
}
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
}
}
inti;
NSOpenPanel*openDlg=[NSOpenPanel-openPanel];
[openDlg setCanChooseFiles:是];
[openDlg SetCanChoosedDirectories:是];
if([openDlg runModalForDirectory:nil file:nil]==NSOKButton)
{
NSArray*文件=[openDlg文件名];
对于(i=0;i<[文件计数];i++)
{
NSString*fileName=[files objectAtIndex:i];
NSLog(文件名);
NSString*catched=文件名;
[自执行选择器:@selector(decompresss2z:)with object:catched];
}
}
当我记录
fileName
时,它是正确的,并打印我的文件完整目录,但当我尝试将它与我的void一起使用时,它会像超级奇怪的字母一样,像ÿ^0f完全随机。为什么?这段代码没有问题。事实上,该代码有很多地方不太理想,但没有什么能让它不工作。解压s2z:函数看起来像什么
如果这是我的代码,我将进行以下更改:
runModalForDirectory:file:
已弃用;您应该改用runModal
文件名
已弃用;您应该改用URL
(您可以对每个URL调用path
,以获取文件名)NSLog
的参数必须是格式字符串,否则可能会发生奇怪的事情),而不是在带有索引的容器中循环。它不仅效率更高,而且代码更少(代码越少越好)
性能选择器:withObject:
;只需正常调用该方法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];
}
}
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:是什么样子。这段代码没有什么问题。事实上,该代码有很多地方不太理想,但没有什么能让它不工作。解压s2z:函数看起来像什么 如果这是我的代码,我将进行以下更改:
runModalForDirectory:file:
已弃用;您应该改用runModal
文件名
已弃用;您应该改用URL
(您可以对每个URL调用path
,以获取文件名)NSLog
的参数必须是格式字符串,否则可能会发生奇怪的事情),而不是在带有索引的容器中循环。它不仅效率更高,而且代码更少(代码越少越好)
性能选择器:withObject:
;只需正常调用该方法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];
}
}
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:是什么样子。你说的“将它用于我的void”是什么意思?此外,runModalForDirectory:file:types:在10.6中被折旧,您应该改用runModal。您所说的“与我的void一起使用”是什么意思?此外,runModalForDirectory:file:types:在10.6中被折旧,您应该改用runModal。每隔一个地方仍然是不推荐的方法。最后更新了答案。每隔一个地方仍然是不推荐的方法。