NSFileManager 在 Xcode 中作为发行版构建时有效,但在作为独立 OS X Cocoa 应用程序运行时无效
Posted
技术标签:
【中文标题】NSFileManager 在 Xcode 中作为发行版构建时有效,但在作为独立 OS X Cocoa 应用程序运行时无效【英文标题】:NSFileManager works when built in Xcode as release, but not when ran as standalone OS X Cocoa app 【发布时间】:2011-06-16 17:25:41 【问题描述】:我编写了以下函数来从目录中随机选择一个文件。当我在 Xcode 中构建项目以使用自动打开的应用程序发布时,它工作得很好。但是,如果我从 finder 打开应用程序,按下触发此功能的按钮将导致我的程序冻结然后崩溃。我唯一能想到的是将参数更改为 contentsOfDirectoryAtPath: 以不具有 ./,但任何一个版本都有相同的确切问题。
查看控制台告诉我,我的程序异常退出并出现浮点异常,但我不知道是什么原因造成的。有什么我没有看到的东西跳出来给你们吗?大约一周前我才开始学习/使用 Objective-C 和可可,所以这对我来说都是全新的。
感谢您查看此...
- (NSMutableString*)setFilePathRandom
NSArray* files;
NSFileManager* fileManager;
fileManager = [[NSFileManager alloc] init];
files = [fileManager contentsOfDirectoryAtPath:@"./Random Trippy Pics" error:NULL];
NSString* directoryPath = (NSMutableString*)[fileManager currentDirectoryPath];
NSString* fileName;
do
fileName = [files objectAtIndex:(arc4random()%[files count])];
while([fileName isEqualToString:@".DS_Store"]);
filePath = [NSString stringWithFormat:@"%@/Random Trippy Pics/%@",directoryPath,fileName];
[fileManager release];
return filePath;
【问题讨论】:
【参考方案1】:当从 Xcode 运行 OS X 应用程序时,其当前目录是构建文件夹的路径。当“正常”运行时,当前目录为/
。因此,您的程序正在寻找/Random Trippy Pics
的目录,该目录几乎可以肯定不存在。那个目录一般在哪里?
编辑:
你可以用这段代码得到应用程序当前存储的目录:
NSString *currentStoragePath = [[[NSBundle mainBundle] bundlePath] stringByDeletingLastPathComponent];
但是,如果应用程序需要Random Trippy Pics
目录,则应将其存储在已知位置——最好是应用程序的Resource
目录。然后您可以通过以下方式获取内容:
NSArray *files = [[NSBundle mainBundle] pathsForResourceOfType:nil inDirectory:@"Random Trippy Pics"];
【讨论】:
哦,好吧。非常感谢您帮我解决这个问题!也就是说,是否有任何功能可以为我提供应用程序所在的文件夹?我基本上有我的应用程序和一个名为“Random Trippy Pics”的文件夹,位于该应用程序所在的同一目录中。 甜蜜。非常感谢米帕迪!我想这是我学习如何使用 Cocoa 捆绑包的时间点。我必须在某个时候学习它,现在是最好的时机。到 Apple 开发者中心!我认为他们会在那里提供各种教程/指南。 @thisissami:资源编程指南是一个好的开始:developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/…以上是关于NSFileManager 在 Xcode 中作为发行版构建时有效,但在作为独立 OS X Cocoa 应用程序运行时无效的主要内容,如果未能解决你的问题,请参考以下文章
NSFileManager contentsOfDirectoryPath 返回空
OSX:如何访问 NSFileManager 方法 contentsOfDirectoryAtUrl 中的属性:
解决[[NSFileManager defaultManager] contentsOfDirectoryAtPath 方法获取不到数据的bug