【问题标题】:NSFileManager finds files inside a folder only when it's running under a debuggerNSFileManager 只有在调试器下运行时才会在文件夹中查找文件
【发布时间】:2011-12-28 10:15:40
【问题描述】:

当我在 Xcode 调试器下运行以下代码时,它成功找到了扩展名为 .app 的包,但是当我运行它时,独立的“文件”对象为零。事实上,当我做 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] 路径,它现在可以工作了。但是,如果有人可以阐明为什么相对路径不起作用,那就太好了。

【问题讨论】:

    标签: objective-c macos cocoa filesystems nsfilemanager


    【解决方案1】:

    是否将第一行更改为:

    NSFileManager *localFileManager = [NSFileManager defaultManager];

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

    【讨论】:

    • 这没有帮助。在我看来,所有文件系统操作都失败了。事实上 NSTask 启动也在下降,即使我对启动路径进行硬编码,它也会返回“启动路径不可访问”。当然,所有这些在调试器下都可以正常工作。只是为了让您了解我在做什么,我正在创建一个自定义安装程序,它执行各种安装程序并执行文件系统操作。
    • 您没有意外启用权利(即沙盒)吧?
    • 我之前检查过,权利肯定被禁用了。不过,这似乎是沙盒类型的问题。但是是的,启用权利未选中。
    • 我在 Xcode 4.2 中创建了一个新的空项目,并将上面的代码(使用 NSLogs)粘贴到 applicationDidFinishLaunching 选择器中。同样的交易,只能在调试器下工作。
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多