Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSFileManager仅在文件夹';它在调试器下运行_Objective C_Macos_Cocoa_Filesystems_Nsfilemanager - Fatal编程技术网

Objective c NSFileManager仅在文件夹';它在调试器下运行

Objective c NSFileManager仅在文件夹';它在调试器下运行,objective-c,macos,cocoa,filesystems,nsfilemanager,Objective C,Macos,Cocoa,Filesystems,Nsfilemanager,当我在Xcode调试器下运行以下代码时,它成功地找到扩展名为.app的包,但当我运行它时,独立的“file”对象为nil。事实上,当我做NSLogs时,folderEnum也是零。请注意,folderPath指向与程序可执行文件位于同一目录中的文件夹 NSFileManager *localFileManager = [[NSFileManager alloc] init]; NSDirectoryEnumerator *folderEnum = [localFileManager enumer

当我在Xcode调试器下运行以下代码时,它成功地找到扩展名为.app的包,但当我运行它时,独立的“file”对象为nil。事实上,当我做NSLogs时,folderEnum也是零。请注意,folderPath指向与程序可执行文件位于同一目录中的文件夹

NSFileManager *localFileManager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *folderEnum = [localFileManager enumeratorAtPath:folderPath];
NSString *file;
while (file = [folderEnum nextObject]) {
  if ([[file pathExtension] isEqualToString: @"app"]) {
     break;
  }
}
有什么想法吗?与Mac系统文件权限有关吗

编辑


我应该提到folderPath实际上是一条相对路径,而不是一条绝对路径。因此,我将folderPath更改为相对于[[NSBundle mainBundle]bundlePath]路径,它现在可以工作了。但如果有人能解释为什么相对路径不起作用,那就太好了。

将第一行更改为:

NSFileManager*localFileManager=[NSFileManager defaultManager]


有什么不同吗?您只是想获取应用程序的路径吗?(有更简单的方法)

那没用。在我看来,所有的文件系统操作都失败了。事实上,NSTask启动也在下降,即使我硬编码启动路径,它也会返回“启动路径不可访问”。当然,所有这些都可以在调试器下正常工作。为了让您了解我在做什么,我正在创建一个自定义安装程序,它执行各种安装程序并执行文件系统操作。您没有意外地启用权限(即沙箱),是吗?我之前检查过,权限肯定已禁用。不过,这看起来确实像是沙箱类型的问题。我在Xcode 4.2中创建了一个新的空项目,并在ApplicationIDFinishLaunching选择器中粘贴了上面的代码(带有NSLogs)。相同的处理,仅在调试器下工作。